Documentation
¶
Index ¶
- Variables
- func InterpretGrade(grade string) string
- type AdvancedScanRequest
- type BasicScanSummary
- type CertificateMessage
- type CipherConfig
- func (cc *CipherConfig) ComputeContextFreeMetric(config CipherConfigParameters) (metric CipherMetrics)
- func (cc *CipherConfig) GetEncryptionKeyLength() int
- func (cc *CipherConfig) GetKeyExchangeKeyLength(cipher, protocol uint16, scan ScanResult) int
- func (cc *CipherConfig) GetMACPRFStrength() int
- func (cc *CipherConfig) IsAuthenticated() bool
- type CipherConfigParameters
- type CipherMetrics
- type CipherMetricsSorter
- type CurveID
- type GradeExample
- type GradePair
- type GroupedHost
- type HelloAndKey
- type HostAndPort
- type HumanCertificate
- type HumanScanResult
- type IPAndDomain
- type KeyExchangeAlgorithm
- type KeyShare
- type PersistedScanRequest
- type ScanConfig
- type ScanData
- type ScanGroup
- type ScanProgress
- type ScanResult
- type ScanResultSorter
- type ScanResultSummary
- type SecurityScore
- type ServerHelloMessage
- type ServerKeyExchangeMsg
- type TLSAuditConfig
- type TLSAuditSnapshot
- type TLSAuditSnapshotHuman
Constants ¶
This section is empty.
Variables ¶
var (
//NkxErrorMessage error message
NkxErrorMessage = "Not a key exchange message"
)
Functions ¶
func InterpretGrade ¶ added in v0.7.0
InterpretGrade is a mapping from grade to explanatory text
Types ¶
type AdvancedScanRequest ¶ added in v0.5.4
type AdvancedScanRequest struct {
Config ScanConfig
//Next two fields will be automatically set once scan starts
Day string //Date the scan was run in the format yyyy-mm-dd
ScanID string //Non-empty ScanID means this is a ScanRequest to resume an existing, possibly incomplete, scan
ScanGroups []ScanGroup
}
AdvancedScanRequest is a model to describe a given TLS Audit scan
type BasicScanSummary ¶ added in v0.7.0
type BasicScanSummary struct {
HostCount int
PortCount int
BestGrade string
BestGradeExample GradeExample
WorstGrade string
WorstGradeExample GradeExample
HostGrades map[string]GradePair //mapping of "host IP" -> "BestGrade x WorstGrade"
GradeToHostPorts map[string][]string //mapping of "grade" -> []{"hostIP:Port" ...}, e.g. "A+" -> []{"10.10.10.10:443"}
}
BasicScanSummary is a subset of ScanResultSammary
func GetBasicScanSummary ¶ added in v0.7.0
func GetBasicScanSummary(results []HumanScanResult) BasicScanSummary
GetBasicScanSummary basic scan summary
type CertificateMessage ¶
type CertificateMessage struct {
// Raw []byte
Certificates [][]byte
Certs []*x509.Certificate
}
CertificateMessage simply exporting the internal certificateMsg
func (*CertificateMessage) GetCertificates ¶
func (cert *CertificateMessage) GetCertificates() (certs []*x509.Certificate, e error)
GetCertificates returns the list of certificates in a TLS certificate message
type CipherConfig ¶ added in v0.1.9
type CipherConfig struct {
CipherID uint16
Cipher string
KeyExchange string
Authentication string
IsExport bool
SupportsForwardSecrecy bool
Encryption string
MACPRF string //MAC (TLS <=1.1) or PseudoRandomFunction (TLS >= 1.2)
}
CipherConfig extracts the important elements of a Ciphersuit based on its name
func GetCipherConfig ¶ added in v0.1.9
func GetCipherConfig(cipher uint16) (config CipherConfig, err error)
GetCipherConfig extracts a `CipherConfig` using the Cipher's IANA string name Details here https://www.iana.org/assignments/tls-parameters/tls-parameters.txt
func (*CipherConfig) ComputeContextFreeMetric ¶ added in v0.1.27
func (cc *CipherConfig) ComputeContextFreeMetric(config CipherConfigParameters) (metric CipherMetrics)
ComputeContextFreeMetric calculates interesting metrics about the cipher
func (*CipherConfig) GetEncryptionKeyLength ¶ added in v0.1.9
func (cc *CipherConfig) GetEncryptionKeyLength() int
GetEncryptionKeyLength returns the effective key lengths of encryption algorithms used in the cipher See https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf for details
func (*CipherConfig) GetKeyExchangeKeyLength ¶ added in v0.1.9
func (cc *CipherConfig) GetKeyExchangeKeyLength(cipher, protocol uint16, scan ScanResult) int
GetKeyExchangeKeyLength returns the key length indicated by the cipher
func (*CipherConfig) GetMACPRFStrength ¶ added in v0.1.27
func (cc *CipherConfig) GetMACPRFStrength() int
GetMACPRFStrength returns the relative strength of the MAC/PRF algorithm
func (*CipherConfig) IsAuthenticated ¶ added in v0.1.9
func (cc *CipherConfig) IsAuthenticated() bool
IsAuthenticated returns whether the cipher supports authentication
type CipherConfigParameters ¶ added in v0.1.27
type CipherConfigParameters struct {
RSABitLength int //The RSA key from the certificate
SupportedGroupStrength int
SupportedGroups []string //The Supported Groups that have the indicated strength
}
CipherConfigParameters contains information about Parameters for determining the key length of key exchange algorithms and other cipher parameters
type CipherMetrics ¶ added in v0.1.27
type CipherMetrics struct {
Authentication int
KeyExchangeStrength int
ForwardSecrecy int
EncryptionKeyStrength int
MacPRF int
Performance int
OverallScore int
ConfigParams CipherConfigParameters
CipherConfig CipherConfig
}
CipherMetrics are various metrics of interest to compare ciphers as the bases for various desirable property ordering such as security and performance
func EnumerateCipherMetrics ¶ added in v0.1.27
func EnumerateCipherMetrics() (metrics []CipherMetrics)
EnumerateCipherMetrics enumerates metrics for ciphers along multiple config axes
type CipherMetricsSorter ¶ added in v0.1.27
type CipherMetricsSorter []CipherMetrics
CipherMetricsSorter sorts scan results by server IP and port
func (CipherMetricsSorter) Len ¶ added in v0.1.27
func (k CipherMetricsSorter) Len() int
func (CipherMetricsSorter) Less ¶ added in v0.1.27
func (k CipherMetricsSorter) Less(i, j int) bool
func (CipherMetricsSorter) Swap ¶ added in v0.1.27
func (k CipherMetricsSorter) Swap(i, j int)
type CurveID ¶ added in v0.5.5
type CurveID uint16
CurveID is the type of a TLS identifier for an elliptic curve. See https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8.
In TLS 1.3, this type is called NamedGroup, but at this time this library only supports Elliptic Curve based groups. See RFC 8446, Section 4.2.7.
type GradeExample ¶ added in v0.7.0
type GradeExample struct {
Grade, Server, Port, HostName string
}
GradeExample is an instance with a given grade
type GradePair ¶ added in v0.7.0
type GradePair struct {
Best, Worst string
}
GradePair collects the best and worst grade of a server scan
type GroupedHost ¶ added in v0.5.4
type GroupedHost struct {
ScanGroup ScanGroup
Hosts []string
IPAndDomains []IPAndDomain
}
GroupedHost exploded hosts from an associated ScanGroup
type HelloAndKey ¶
type HelloAndKey struct {
Hello ServerHelloMessage
Key ServerKeyExchangeMsg
HasKey bool
}
HelloAndKey bundles server hello and ServerKeyExchange messages
type HostAndPort ¶
HostAndPort is a model representing a hostname and a given port
type HumanCertificate ¶ added in v0.1.22
type HumanCertificate struct {
Subject string
SubjectSerialNo string
SubjectCN string
SubjectAN string
SerialNumber string
Issuer string
PublicKeyAlgorithm string
ValidFrom string
ValidUntil string
Key string
SignatureAlgorithm string
Signature string
OcspStapling bool
RevocationDetail string
Version int
IsCA bool
HasChainIssue bool
}
HumanCertificate is a "string" representation of various attributes of a certificate
func GetUniqueCertificates ¶ added in v0.7.0
func GetUniqueCertificates(scan HumanScanResult) (certs []HumanCertificate)
GetUniqueCertificates returns all the unique certificates (using the certificate serial number) from a scan result
type HumanScanResult ¶
type HumanScanResult struct {
Server string //IP address
HostName string
Port string
SupportsTLS bool
SupportedProtocols []string
HasCipherPreferenceOrderByProtocol map[string]bool
CipherPreferenceOrderByProtocol map[string][]string
OcspStaplingByProtocol map[string]bool
SelectedCipherByProtocol map[string]string
ALPNByProtocol map[string]string
SecureRenegotiationSupportedByProtocol map[string]bool
CipherSuiteByProtocol map[string][]string
// ServerHelloMessageByProtocolByCipher map[string]map[string]ServerHelloMessage
CertificatesPerProtocol map[string][]HumanCertificate
CertificatesWithChainIssue map[string]bool
// KeyExchangeByProtocolByCipher map[string]map[string]ServerKeyExchangeMsg
IsSTARTTLS bool
IsSSH bool
SupportsTLSFallbackSCSV bool
Score SecurityScore
GroupID int //ScanRequest Host Group index
}
HumanScanResult is a Stringified version of ScanResult
func UnmarsharlScanResult ¶ added in v0.1.18
func UnmarsharlScanResult(data []byte) ([]HumanScanResult, error)
UnmarsharlScanResult builds ScanResults from bytes
type IPAndDomain ¶ added in v0.6.6
type IPAndDomain struct {
IP, Domain string
}
IPAndDomain a representation of an IP and a possibly empty domain name
type KeyShare ¶ added in v0.5.5
type KeyShare struct {
}
KeyShare TLS 1.3 Key Share. See RFC 8446, Section 4.2.8.
type PersistedScanRequest ¶ added in v0.1.18
type PersistedScanRequest struct {
Request AdvancedScanRequest
GroupedHosts []GroupedHost
ScanStart time.Time
ScanEnd time.Time
Progress int
HostCount int
}
PersistedScanRequest persisted version of ScanRequest
func UnmasharlPersistedScanRequest ¶ added in v0.1.18
func UnmasharlPersistedScanRequest(data []byte) (PersistedScanRequest, error)
UnmasharlPersistedScanRequest builds PersistedScanRequest from bytes
func (PersistedScanRequest) Marshall ¶ added in v0.1.18
func (psr PersistedScanRequest) Marshall() []byte
Marshall scan request
type ScanConfig ¶
type ScanConfig struct {
ProtocolsOnly bool
Timeout int
//Number of Packets per Second to send out during underlying port scan
PacketsPerSecond int
//Suppress certificate output
HideCerts bool
//Suppress output of TLS status of closed ports or ports with no TLS
HideNoTLS bool
//control whether to produce a running commentary of scan progress or stay quiet till the end
Quiet bool
ServicePort int
}
ScanConfig describes details of how the TLS scan should be carried out
type ScanData ¶ added in v0.5.4
type ScanData struct {
ScanRequest AdvancedScanRequest
Results map[int][]HumanScanResult //ScanGroup index (in the ASR) -> human scan results
}
ScanData is the Human-readable result of a given scan
type ScanGroup ¶ added in v0.5.4
type ScanGroup struct {
Description string `yaml:"description"` //Freeform text used in reporting
CIDRRanges []string `yaml:"cidrRanges"`
}
ScanGroup is a grouping of CIDR ranges to be scanned with descriptions, useful for reporting
type ScanProgress ¶ added in v0.1.10
type ScanProgress struct {
ScanID string
Progress float32
ScanResults []HumanScanResult // this is the latest scan results delta, at the end of scan all cummulative scans are sent
Narrative string //freeflow text
}
ScanProgress contains partial scam results with an indication of progress
type ScanResult ¶
type ScanResult struct {
Server string //IP address
HostName string
Port string
SupportedProtocols []uint16
HasCipherPreferenceOrderByProtocol map[uint16]bool
CipherPreferenceOrderByProtocol map[uint16][]uint16
OcspStaplingByProtocol map[uint16]bool
SelectedCipherByProtocol map[uint16]uint16
ALPNByProtocol map[uint16]string
SecureRenegotiationSupportedByProtocol map[uint16]bool
CipherSuiteByProtocol map[uint16][]uint16
ServerHelloMessageByProtocolByCipher map[uint16]map[uint16]ServerHelloMessage
CertificatesPerProtocol map[uint16]CertificateMessage
KeyExchangeByProtocolByCipher map[uint16]map[uint16]ServerKeyExchangeMsg
IsSTARTTLS bool
IsSSH bool
SupportsTLSFallbackSCSV bool
Score SecurityScore
CertificatesWithChainIssue map[string]bool //Cert Serial Number -> true
GroupID int //ScanRequest Host Group index
}
ScanResult is the scan result of a server TLS settings
func (*ScanResult) CalculateScore ¶ added in v0.1.9
func (s *ScanResult) CalculateScore() SecurityScore
CalculateScore computes an SSLLabs-esque score for the scan https://github.com/ssllabs/research/wiki/SS https://community.qualys.com/docs/DOC-6321-ssl-labs-grading-2018 SecurityScoreL-Server-Rating-Guide contains the overall grading of a TLS/SSL port
func (ScanResult) String ¶
func (s ScanResult) String() string
func (ScanResult) SupportsTLS ¶
func (s ScanResult) SupportsTLS() bool
SupportsTLS determines whether the port on the specified server supports TLS at all
func (ScanResult) ToHumanScanResult ¶ added in v0.7.0
func (s ScanResult) ToHumanScanResult() (out HumanScanResult)
ToHumanScanResult returns a string-decoded form of ScanResult
func (ScanResult) ToJSON ¶
func (s ScanResult) ToJSON() (js string)
ToJSON returns a JSON-formatted string representation of the ScanResult
func (ScanResult) ToString ¶
func (s ScanResult) ToString(config ScanConfig) (result string)
ToString generates a string output
type ScanResultSorter ¶ added in v0.1.18
type ScanResultSorter []ScanResult
ScanResultSorter sorts scan results by server IP and port
func (ScanResultSorter) Len ¶ added in v0.1.18
func (k ScanResultSorter) Len() int
func (ScanResultSorter) Less ¶ added in v0.1.18
func (k ScanResultSorter) Less(i, j int) bool
func (ScanResultSorter) Swap ¶ added in v0.1.18
func (k ScanResultSorter) Swap(i, j int)
type ScanResultSummary ¶ added in v0.1.21
type ScanResultSummary struct {
Request AdvancedScanRequest
ScanStart time.Time
ScanEnd time.Time
Progress int
BasicScanSummary
}
ScanResultSummary is the summary of a scan result session
type SecurityScore ¶ added in v0.1.9
type SecurityScore struct {
ProtocolScore int
KeyExchangeScore int
CipherEncryptionScore int
CertificateScore int
Grade string
Warnings []string
}
SecurityScore contains the overall grading of a TLS/SSL port
func (SecurityScore) OrderGrade ¶ added in v0.1.21
func (SecurityScore) OrderGrade(grade string) int
OrderGrade allows a simple numeric ordering of TLS grades. Actual values don't matter
type ServerHelloMessage ¶
type ServerHelloMessage struct {
Raw []byte
Vers uint16
Random []byte
SessionID []byte
CipherSuite uint16
CompressionMethod uint8
NextProtoNeg bool
NextProtos []string
OcspStapling bool
Scts [][]byte
TicketSupported bool
SecureRenegotiation []byte
SecureRenegotiationSupported bool
AlpnProtocol string
SupportedVersion uint16
SelectedIdentityPresent bool
SelectedIdentity uint16
SupportedPoints []uint8
// contains filtered or unexported fields
}
ServerHelloMessage is the TLS server hello message
type ServerKeyExchangeMsg ¶
ServerKeyExchangeMsg is the key exchange message
type TLSAuditConfig ¶ added in v0.1.22
type TLSAuditConfig struct {
DailySchedules []string `yaml:"dailySchedules"` // in the format 13:45, 01:20 etc
ServicePort int `yaml:"servicePort"`
IsProduction bool `yaml:"isProduction"`
PacketsPerSecond int `yaml:"packetsPerSecond"`
Timeout int `yaml:"timeout"`
ScanGroups []ScanGroup `yaml:"scanGroups"`
}
TLSAuditConfig is the configuration of the nmap runner
type TLSAuditSnapshot ¶ added in v0.1.22
type TLSAuditSnapshot struct {
Timestamp time.Time
ScanResults []ScanResult
}
TLSAuditSnapshot a snapshot representing the results of a given scan session
type TLSAuditSnapshotHuman ¶ added in v0.1.22
type TLSAuditSnapshotHuman struct {
Timestamp time.Time
ScanResults []HumanScanResult
}
TLSAuditSnapshotHuman a snapshot representing the results of a given scan session