@@ -21,6 +21,7 @@ import (
21
21
oamcert "github.com/owasp-amass/open-asset-model/certificate"
22
22
"github.com/owasp-amass/open-asset-model/domain"
23
23
"github.com/owasp-amass/open-asset-model/network"
24
+ "github.com/owasp-amass/open-asset-model/relation"
24
25
"github.com/owasp-amass/open-asset-model/service"
25
26
)
26
27
@@ -46,11 +47,6 @@ func (r *interrogation) check(e *et.Event) error {
46
47
return nil
47
48
}
48
49
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
-
54
50
matches , err := e .Session .Config ().CheckTransformations (string (atype ), append (r .transforms , r .plugin .name )... )
55
51
if err != nil || matches .Len () == 0 {
56
52
return nil
@@ -67,12 +63,13 @@ func (r *interrogation) check(e *et.Event) error {
67
63
return err
68
64
}
69
65
66
+ src := r .plugin .source
70
67
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 )... )
73
70
} 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 )
76
73
}
77
74
78
75
if len (findings ) > 0 {
@@ -81,7 +78,7 @@ func (r *interrogation) check(e *et.Event) error {
81
78
return nil
82
79
}
83
80
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 {
85
82
fqdn := asset .Asset .Key ()
86
83
var findings []* support.Finding
87
84
atype := string (oam .NetworkEndpoint )
@@ -103,11 +100,11 @@ func (r *interrogation) lookup(e *et.Event, asset, src *dbt.Asset, since time.Ti
103
100
return findings
104
101
}
105
102
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 {
107
104
var findings []* support.Finding
108
105
109
106
var addr , host string
110
- if sa , ok := asset .Asset .(* network.SocketAddress ); ok {
107
+ if sa , ok := entity .Asset .(* network.SocketAddress ); ok {
111
108
addr = sa .Protocol + "://"
112
109
host = sa .IPAddress .String ()
113
110
@@ -116,7 +113,7 @@ func (r *interrogation) query(e *et.Event, asset, src *dbt.Asset) []*support.Fin
116
113
} else {
117
114
addr += sa .Address .String ()
118
115
}
119
- } else if ne , ok := asset .Asset .(* domain.NetworkEndpoint ); ok {
116
+ } else if ne , ok := entity .Asset .(* domain.NetworkEndpoint ); ok {
120
117
host = ne .Name
121
118
addr = ne .Protocol + "://"
122
119
@@ -138,55 +135,42 @@ func (r *interrogation) query(e *et.Event, asset, src *dbt.Asset) []*support.Fin
138
135
return findings
139
136
}
140
137
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 ()
143
140
var findings []* support.Finding
144
141
145
- var firstAsset * dbt.Asset
142
+ var firstAsset * dbt.Entity
146
143
var firstCert * x509.Certificate
147
144
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
+ }
152
152
153
- if e .Session .Done () {
154
- return
153
+ a , err := e .Session .Cache ().CreateAsset (c )
154
+ if err != nil {
155
+ break
155
156
}
156
157
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
+ })
186
171
}
187
- })
188
- <- done
189
- close (done )
172
+ prev = a
173
+ }
190
174
}
191
175
192
176
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.
202
186
c = firstAsset .Asset .(* oamcert.TLSCertificate )
203
187
}
204
188
205
- s , err := support .CreateServiceAsset (e .Session , asset , "service" , serv , c )
189
+ s , err := support .CreateServiceAsset (e .Session , entity , "service" , serv , c )
206
190
if err != nil {
207
191
return findings
208
192
}
209
193
210
194
serv = s .Asset .(* service.Service )
211
195
findings = append (findings , & support.Finding {
212
- From : asset ,
196
+ From : entity ,
213
197
FromName : addr ,
214
198
To : s ,
215
199
ToName : "Service: " + serv .Identifier ,
216
- Rel : "service" ,
200
+ Rel : & relation. SimpleRelation { Name : "port" } ,
217
201
})
218
202
219
203
if firstAsset != nil && firstCert != nil {
@@ -223,24 +207,14 @@ func (r *interrogation) store(e *et.Event, resp *http.Response, asset, src *dbt.
223
207
To : firstAsset ,
224
208
ToName : c .SerialNumber ,
225
209
ToMeta : firstCert ,
226
- Rel : "certificate" ,
210
+ Rel : & relation. SimpleRelation { Name : "certificate" } ,
227
211
})
228
212
}
229
213
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 )
240
214
return findings
241
215
}
242
216
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 ) {
244
218
support .ProcessAssetsWithSource (e , findings , src , r .plugin .name , r .name )
245
219
}
246
220
0 commit comments