Class: Mdm::Host
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Mdm::Host
- Includes:
- OperatingSystemNormalization
- Defined in:
- app/models/mdm/host.rb
Overview
A system with an IP address on the network that has been discovered in some way.
Defined Under Namespace
Modules: OperatingSystemNormalization
Constant Summary collapse
- ARCHITECTURES =
Either the CPU architecture for native code or the programming language name for exploits that run code in the programming language's virtual machine.
[ 'armbe', 'armle', 'cbea', 'cbea64', 'cmd', 'java', 'mips', 'mipsbe', 'mipsle', 'php', 'ppc', 'ppc64', 'ruby', 'sparc', 'tty', # To be used for compatability with 'X86_64' 'x64', 'x86', 'x86_64' ]
- SEARCH_FIELDS =
Fields searched for the search scope
[ 'address::text', 'comments', 'mac', 'name', 'os_flavor', 'os_name', 'os_sp', 'purpose' ]
- STATES =
Valid values for #state.
[ 'alive', 'down', 'unknown' ]
Instance Attribute Summary collapse
-
#address ⇒ String
The IP address of this host.
-
#arch ⇒ String
The architecture of the host's CPU OR the programming language for virtual machine programming language like Ruby, PHP, and Java.
- #comm ⇒ String
-
#comments ⇒ String
User supplied comments about host.
-
#created_at ⇒ DateTime
When this host was created in the database.
-
#cred_count ⇒ Integer
Counter cache for #creds.
-
#creds ⇒ Array<Mdm::Cred>
readonly
Credentials captured from #services.
-
#exploit_attempt_count ⇒ Integer
Counter cache for #exploit_attempts.
-
#exploit_attempts ⇒ Array<Mdm::ExploitAttempt]
Attempts to run exploits against this host.
- #exploited_hosts ⇒ Array<Mdm::ExploitedHost>
-
#host_detail_count ⇒ Integer
Counter cache for #host_details.
- #host_details ⇒ Array<Mdm::HostDetail>
- #hosts_tags ⇒ Array<Mdm::HostTag>
-
#info ⇒ String
Information about this host gathered from the host.
-
#loots ⇒ Array<Mdm::Loot>
Loot gathered from the host with newest loot first.
-
#mac ⇒ String
The MAC address of this host.
-
#module_details ⇒ Array<Mdm::Module::Detail]
readonly
Details about modules that were used to find vulnerabilities on this host.
- #module_refs ⇒ Array<Mdm::Module::Ref> readonly
-
#name ⇒ String
The name of the host.
-
#note_count ⇒ Integer
Counter cache for #notes.
-
#notes ⇒ Array<Mdm::Note>
Notes about the host entered by a user with oldest notes first.
-
#os_flavor ⇒ String
The flavor of #os_name.
-
#os_lang ⇒ String
Free-form language of operating system.
-
#os_name ⇒ String
The name of the operating system.
-
#os_sp ⇒ String
The service pack of the #os_flavor of the #os_name.
-
#purpose ⇒ String
The purpose of the host on the network, such as 'client' or 'firewall'.
-
#refs ⇒ Array<Mdm::Ref>
readonly
External references, such as CVE, to vulnerabilities found on this host.
-
#scope ⇒ String
Interface identifier for link-local IPv6.
-
#service_count ⇒ Integer
Counter cache for #services.
- #service_notes ⇒ Array<Mdm::Note> readonly
- #services ⇒ Array<Mdm::Service>
-
#sessions ⇒ Array<Mdm::Session]
Sessions that are open or previously were open on the host ordered by when the session was opened.
-
#state ⇒ String
Whether the host is alive, down, or in an unknown state.
-
#tags ⇒ Array<Mdm::Tag>
readonly
The tags on this host.
-
#updated_at ⇒ DateTime
The last time this host was updated in the database.
-
#virtual_host ⇒ String
The name of the virtual machine host software, such as 'VMWare', 'QEMU', 'XEN', etc.
-
#vuln_count ⇒ Integer
Counter cache for #vulns.
- #vuln_refs ⇒ Array<Mdm::VulnRef> readonly
-
#vulns ⇒ Array<Mdm::Vuln>
Vulnerabilities found on the host.
- #web_sites ⇒ Array<Mdm::WebSite> readonly
-
#workspace ⇒ Mdm::Workspace
The workspace in which this host was found.
Instance Method Summary collapse
- #attribute_locked?(attr) ⇒ true, false
-
#cleanup_tags ⇒ void
Destroys any Mdm::Tags that will have no Tag#hosts left after this host is deleted.
-
#ip_address_invalid? ⇒ void
This is replicated by the IpAddressValidator class.
-
#is_vm? ⇒ true, false
Returns whether this host is a virtual machine.
Methods included from OperatingSystemNormalization
#get_arch_from_string, #normalize_os, #normalize_scanner_fp, #parse_windows_os_str, #validate_fingerprint_data
Instance Attribute Details
#address ⇒ String
The IP address of this host.
|
|
# File 'app/models/mdm/host.rb', line 208
|
#arch ⇒ String
The architecture of the host's CPU OR the programming language for virtual machine programming language like Ruby, PHP, and Java.
|
|
# File 'app/models/mdm/host.rb', line 213
|
#comm ⇒ String
|
|
# File 'app/models/mdm/host.rb', line 219
|
#comments ⇒ String
User supplied comments about host.
|
|
# File 'app/models/mdm/host.rb', line 224
|
#created_at ⇒ DateTime
When this host was created in the database.
|
|
# File 'app/models/mdm/host.rb', line 229
|
#creds ⇒ Array<Mdm::Cred> (readonly)
Credentials captured from #services.
140 |
# File 'app/models/mdm/host.rb', line 140 has_many :creds, :class_name => 'Mdm::Cred', :through => :services |
#exploit_attempt_count ⇒ Integer
Counter cache for #exploit_attempts.
|
|
# File 'app/models/mdm/host.rb', line 239
|
#exploit_attempts ⇒ Array<Mdm::ExploitAttempt]
Attempts to run exploits against this host.
60 61 62 |
# File 'app/models/mdm/host.rb', line 60 has_many :exploit_attempts, :class_name => 'Mdm::ExploitAttempt', :dependent => :destroy |
#exploited_hosts ⇒ Array<Mdm::ExploitedHost>
67 |
# File 'app/models/mdm/host.rb', line 67 has_many :exploited_hosts, :class_name => 'Mdm::ExploitedHost', :dependent => :destroy |
#host_detail_count ⇒ Integer
Counter cache for #host_details.
|
|
# File 'app/models/mdm/host.rb', line 244
|
#host_details ⇒ Array<Mdm::HostDetail>
71 |
# File 'app/models/mdm/host.rb', line 71 has_many :host_details, :class_name => 'Mdm::HostDetail', :dependent => :destroy |
#hosts_tags ⇒ Array<Mdm::HostTag>
A join model between Tag and Mdm::Host. Use #tags to get the actual Mdm::Tags on this host. #hosts_tags are cleaned up in a before_destroy: #cleanup_tags.
79 |
# File 'app/models/mdm/host.rb', line 79 has_many :hosts_tags, :class_name => 'Mdm::HostTag' |
#info ⇒ String
Information about this host gathered from the host.
|
|
# File 'app/models/mdm/host.rb', line 249
|
#loots ⇒ Array<Mdm::Loot>
Loot gathered from the host with newest loot first.
86 |
# File 'app/models/mdm/host.rb', line 86 has_many :loots, :class_name => 'Mdm::Loot', :dependent => :destroy, :order => 'loots.created_at DESC' |
#mac ⇒ String
The MAC address of this host.
|
|
# File 'app/models/mdm/host.rb', line 254
|
#module_details ⇒ Array<Mdm::Module::Detail] (readonly)
Details about modules that were used to find vulnerabilities on this host.
198 199 200 201 202 |
# File 'app/models/mdm/host.rb', line 198 has_many :module_details, :class_name => 'Mdm::Module::Detail', :source =>:detail, :through => :module_refs, :uniq => true |
#module_refs ⇒ Array<Mdm::Module::Ref> (readonly)
188 |
# File 'app/models/mdm/host.rb', line 188 has_many :module_refs, :class_name => 'Mdm::Module::Ref', :through => :refs |
#name ⇒ String
The name of the host. If the host name is not available, then it will just be the IP address.
|
|
# File 'app/models/mdm/host.rb', line 260
|
#notes ⇒ Array<Mdm::Note>
Notes about the host entered by a user with oldest notes first.
92 |
# File 'app/models/mdm/host.rb', line 92 has_many :notes, :class_name => 'Mdm::Note', :dependent => :delete_all, :order => 'notes.created_at' |
#os_lang ⇒ String
Free-form language of operating system. Usually either spelled out like 'English' or an IETF language tag like 'en' or 'en-US'.
|
|
# File 'app/models/mdm/host.rb', line 279
|
#os_name ⇒ String
The name of the operating system.
|
|
# File 'app/models/mdm/host.rb', line 285
|
#os_sp ⇒ String
The service pack of the #os_flavor of the #os_name.
|
|
# File 'app/models/mdm/host.rb', line 290
|
#purpose ⇒ String
The purpose of the host on the network, such as 'client' or 'firewall'.
|
|
# File 'app/models/mdm/host.rb', line 300
|
#refs ⇒ Array<Mdm::Ref> (readonly)
External references, such as CVE, to vulnerabilities found on this host.
178 |
# File 'app/models/mdm/host.rb', line 178 has_many :refs, :class_name => 'Mdm::Ref', :through => :vuln_refs |
#scope ⇒ String
Interface identifier for link-local IPv6
|
|
# File 'app/models/mdm/host.rb', line 305
|
#service_notes ⇒ Array<Mdm::Note> (readonly)
147 |
# File 'app/models/mdm/host.rb', line 147 has_many :service_notes, :class_name => 'Mdm::Note', :through => :services |
#services ⇒ Array<Mdm::Service>
99 |
# File 'app/models/mdm/host.rb', line 99 has_many :services, :class_name => 'Mdm::Service', :dependent => :destroy, :order => 'services.port, services.proto' |
#sessions ⇒ Array<Mdm::Session]
Sessions that are open or previously were open on the host ordered by when the session was opened
106 |
# File 'app/models/mdm/host.rb', line 106 has_many :sessions, :class_name => 'Mdm::Session', :dependent => :destroy, :order => 'sessions.opened_at' |
#state ⇒ String
Whether the host is alive, down, or in an unknown state.
|
|
# File 'app/models/mdm/host.rb', line 316
|
#tags ⇒ Array<Mdm::Tag> (readonly)
The tags on this host. Tags are used to filter hosts.
129 |
# File 'app/models/mdm/host.rb', line 129 has_many :tags, :class_name => 'Mdm::Tag', :through => :hosts_tags |
#updated_at ⇒ DateTime
The last time this host was updated in the database.
|
|
# File 'app/models/mdm/host.rb', line 321
|
#virtual_host ⇒ String
The name of the virtual machine host software, such as 'VMWare', 'QEMU', 'XEN', etc.
|
|
# File 'app/models/mdm/host.rb', line 326
|
#vuln_refs ⇒ Array<Mdm::VulnRef> (readonly)
167 |
# File 'app/models/mdm/host.rb', line 167 has_many :vuln_refs, :class_name => 'Mdm::VulnRef', :source => :vulns_refs, :through => :vulns |
#vulns ⇒ Array<Mdm::Vuln>
Vulnerabilities found on the host.
112 |
# File 'app/models/mdm/host.rb', line 112 has_many :vulns, :class_name => 'Mdm::Vuln', :dependent => :delete_all |
#web_sites ⇒ Array<Mdm::WebSite> (readonly)
154 |
# File 'app/models/mdm/host.rb', line 154 has_many :web_sites, :class_name => 'Mdm::WebSite', :through => :services |
#workspace ⇒ Mdm::Workspace
The workspace in which this host was found.
118 |
# File 'app/models/mdm/host.rb', line 118 belongs_to :workspace, :class_name => 'Mdm::Workspace' |
Instance Method Details
#attribute_locked?(attr) ⇒ true, false
403 404 405 406 |
# File 'app/models/mdm/host.rb', line 403 def attribute_locked?(attr) n = notes.find_by_ntype("host.updated.#{attr}") n && n.data[:locked] end |
#cleanup_tags ⇒ void
This method returns an undefined value.
Destroys any Mdm::Tags that will have no Tag#hosts left after this host is deleted.
411 412 413 414 415 416 417 418 |
# File 'app/models/mdm/host.rb', line 411 def # No need to keep tags with no hosts .each do |tag| tag.destroy if tag.hosts == [self] end # Clean up association table records Mdm::HostTag.delete_all("host_id = #{self.id}") end |
#ip_address_invalid? ⇒ void
This method returns an undefined value.
This is replicated by the IpAddressValidator class. Had to put it here as well to avoid SQL errors when checking address uniqueness.
424 425 426 427 428 429 430 431 |
# File 'app/models/mdm/host.rb', line 424 def ip_address_invalid? begin potential_ip = IPAddr.new(address) return true unless potential_ip.ipv4? || potential_ip.ipv6? rescue ArgumentError return true end end |
#is_vm? ⇒ true, false
Returns whether this host is a virtual machine.
437 438 439 |
# File 'app/models/mdm/host.rb', line 437 def is_vm? !!self.virtual_host end |