@@ -21,6 +21,7 @@ import (
2121 oamcert "github.com/owasp-amass/open-asset-model/certificate"
2222 "github.com/owasp-amass/open-asset-model/domain"
2323 "github.com/owasp-amass/open-asset-model/network"
24+ "github.com/owasp-amass/open-asset-model/relation"
2425 "github.com/owasp-amass/open-asset-model/service"
2526)
2627
@@ -46,11 +47,6 @@ func (r *interrogation) check(e *et.Event) error {
4647 return nil
4748 }
4849
49- src := support .GetSource (e .Session , r .plugin .source )
50- if src == nil {
51- return errors .New ("failed to obtain the plugin source information" )
52- }
53-
5450 matches , err := e .Session .Config ().CheckTransformations (string (atype ), append (r .transforms , r .plugin .name )... )
5551 if err != nil || matches .Len () == 0 {
5652 return nil
@@ -67,12 +63,13 @@ func (r *interrogation) check(e *et.Event) error {
6763 return err
6864 }
6965
66+ src := r .plugin .source
7067 var findings []* support.Finding
71- if support .AssetMonitoredWithinTTL (e .Session , e .Asset , src , since ) {
72- findings = append (findings , r .lookup (e , e .Asset , src , since )... )
68+ if support .AssetMonitoredWithinTTL (e .Session , e .Entity , src , since ) {
69+ findings = append (findings , r .lookup (e , e .Entity , src , since )... )
7370 } else {
74- findings = append (findings , r .query (e , e .Asset , src )... )
75- support .MarkAssetMonitored (e .Session , e .Asset , src )
71+ findings = append (findings , r .query (e , e .Entity , src )... )
72+ support .MarkAssetMonitored (e .Session , e .Entity , src )
7673 }
7774
7875 if len (findings ) > 0 {
@@ -81,7 +78,7 @@ func (r *interrogation) check(e *et.Event) error {
8178 return nil
8279}
8380
84- func (r * interrogation ) lookup (e * et.Event , asset , src * dbt. Asset , since time.Time ) []* support.Finding {
81+ func (r * interrogation ) lookup (e * et.Event , asset * dbt. Entity , src * et. Source , since time.Time ) []* support.Finding {
8582 fqdn := asset .Asset .Key ()
8683 var findings []* support.Finding
8784 atype := string (oam .NetworkEndpoint )
@@ -103,11 +100,11 @@ func (r *interrogation) lookup(e *et.Event, asset, src *dbt.Asset, since time.Ti
103100 return findings
104101}
105102
106- func (r * interrogation ) query (e * et.Event , asset , src * dbt. Asset ) []* support.Finding {
103+ func (r * interrogation ) query (e * et.Event , entity * dbt. Entity , src * et. Source ) []* support.Finding {
107104 var findings []* support.Finding
108105
109106 var addr , host string
110- if sa , ok := asset .Asset .(* network.SocketAddress ); ok {
107+ if sa , ok := entity .Asset .(* network.SocketAddress ); ok {
111108 addr = sa .Protocol + "://"
112109 host = sa .IPAddress .String ()
113110
@@ -116,7 +113,7 @@ func (r *interrogation) query(e *et.Event, asset, src *dbt.Asset) []*support.Fin
116113 } else {
117114 addr += sa .Address .String ()
118115 }
119- } else if ne , ok := asset .Asset .(* domain.NetworkEndpoint ); ok {
116+ } else if ne , ok := entity .Asset .(* domain.NetworkEndpoint ); ok {
120117 host = ne .Name
121118 addr = ne .Protocol + "://"
122119
@@ -138,55 +135,42 @@ func (r *interrogation) query(e *et.Event, asset, src *dbt.Asset) []*support.Fin
138135 return findings
139136}
140137
141- func (r * interrogation ) store (e * et.Event , resp * http.Response , asset , src * dbt. Asset ) []* support.Finding {
142- addr := asset .Asset .Key ()
138+ func (r * interrogation ) store (e * et.Event , resp * http.Response , entity * dbt. Entity , src * et. Source ) []* support.Finding {
139+ addr := entity .Asset .Key ()
143140 var findings []* support.Finding
144141
145- var firstAsset * dbt.Asset
142+ var firstAsset * dbt.Entity
146143 var firstCert * x509.Certificate
147144 if resp .TLS != nil && resp .TLS .HandshakeComplete && len (resp .TLS .PeerCertificates ) > 0 {
148- done := make (chan struct {}, 1 )
149-
150- support .AppendToDBQueue (func () {
151- defer func () { done <- struct {}{} }()
145+ var prev * dbt.Entity
146+ // traverse the certificate chain
147+ for _ , cert := range resp .TLS .PeerCertificates {
148+ c := support .X509ToOAMTLSCertificate (cert )
149+ if c == nil {
150+ break
151+ }
152152
153- if e .Session .Done () {
154- return
153+ a , err := e .Session .Cache ().CreateAsset (c )
154+ if err != nil {
155+ break
155156 }
156157
157- var prev * dbt.Asset
158- // traverse the certificate chain
159- for _ , cert := range resp .TLS .PeerCertificates {
160- c := support .X509ToOAMTLSCertificate (cert )
161- if c == nil {
162- break
163- }
164-
165- a , err := e .Session .DB ().Create (prev , "issuing_certificate" , c )
166- if err != nil {
167- break
168- }
169- _ , _ = e .Session .DB ().Link (a , "source" , src )
170-
171- if prev == nil {
172- firstAsset = a
173- firstCert = cert
174- } else {
175- tls := prev .Asset .(* oamcert.TLSCertificate )
176- findings = append (findings , & support.Finding {
177- From : prev ,
178- FromName : tls .SerialNumber ,
179- To : a ,
180- ToName : c .SerialNumber ,
181- ToMeta : cert ,
182- Rel : "issuing_certificate" ,
183- })
184- }
185- prev = a
158+ if prev == nil {
159+ firstAsset = a
160+ firstCert = cert
161+ } else {
162+ tls := prev .Asset .(* oamcert.TLSCertificate )
163+ findings = append (findings , & support.Finding {
164+ From : prev ,
165+ FromName : tls .SerialNumber ,
166+ To : a ,
167+ ToName : c .SerialNumber ,
168+ ToMeta : cert ,
169+ Rel : & relation.SimpleRelation {Name : "issuing_certificate" },
170+ })
186171 }
187- })
188- <- done
189- close (done )
172+ prev = a
173+ }
190174 }
191175
192176 serv := support .ServiceWithIdentifier (& r .plugin .hash , e .Session .ID ().String (), addr )
@@ -202,18 +186,18 @@ func (r *interrogation) store(e *et.Event, resp *http.Response, asset, src *dbt.
202186 c = firstAsset .Asset .(* oamcert.TLSCertificate )
203187 }
204188
205- s , err := support .CreateServiceAsset (e .Session , asset , "service" , serv , c )
189+ s , err := support .CreateServiceAsset (e .Session , entity , "service" , serv , c )
206190 if err != nil {
207191 return findings
208192 }
209193
210194 serv = s .Asset .(* service.Service )
211195 findings = append (findings , & support.Finding {
212- From : asset ,
196+ From : entity ,
213197 FromName : addr ,
214198 To : s ,
215199 ToName : "Service: " + serv .Identifier ,
216- Rel : "service" ,
200+ Rel : & relation. SimpleRelation { Name : "port" } ,
217201 })
218202
219203 if firstAsset != nil && firstCert != nil {
@@ -223,24 +207,14 @@ func (r *interrogation) store(e *et.Event, resp *http.Response, asset, src *dbt.
223207 To : firstAsset ,
224208 ToName : c .SerialNumber ,
225209 ToMeta : firstCert ,
226- Rel : "certificate" ,
210+ Rel : & relation. SimpleRelation { Name : "certificate" } ,
227211 })
228212 }
229213
230- done := make (chan struct {}, 1 )
231- support .AppendToDBQueue (func () {
232- defer func () { done <- struct {}{} }()
233- _ , _ = e .Session .DB ().Link (s , "source" , src )
234- if firstAsset != nil {
235- _ , _ = e .Session .DB ().Link (s , "certificate" , firstAsset )
236- }
237- })
238- <- done
239- close (done )
240214 return findings
241215}
242216
243- func (r * interrogation ) process (e * et.Event , findings []* support.Finding , src * dbt. Asset ) {
217+ func (r * interrogation ) process (e * et.Event , findings []* support.Finding , src * et. Source ) {
244218 support .ProcessAssetsWithSource (e , findings , src , r .plugin .name , r .name )
245219}
246220
0 commit comments