2つの異なるタイプのノードがあります(再表示のLABELS)。図の青い円はと呼ばれWORKLOAD
ます。黄色のものはと呼ばれAPI
ます。
2つのワークロードの間には、関係/エッジがありますACCESSES_WORKLOAD
(最も明るい青/シアンのエッジで示されます)。添付のイメージでは、front-end
ワークロードアクセスuser
とorder
ワークロード。order
ワークロードは、アクセスするuser
ワークロードを。
API
ノードとノードの間には、WORKLOAD
2つのタイプの関係/エッジが存在します。1つはCONTAINS_API
(画像の濃い青色のリンク)と呼ばれ、もう1つはACCESSES_API
(画像の紫色のリンク)と呼ばれます。例えば、添付された画像に、user
ワークロードは、8つの含まAPI
6はによって消費されたS、アウトfront-end
(:含むリストを3 /customers/...
、/addresses
、/register
、/cards
)。残りAPI
の2つのはorders
(リスト:/cards/{cardsId}
と/addresses/{addressesId}
。によって消費されます。
また、ワークロードに含まれるfront-end
3つにもアクセスします()API
orders
/orders/...
2つWORKLOAD
のsのACCESSES_WORKLOAD
間にエッジがあるが、API
それらの間で共通のノードがない可能性もあります。
AがWORKLOAD
呼び出され、余分なエッジ/関係有していてもよいCAUSES_ATTACK
とAPI
に加えて、ACCESSES_API
エッジ。画像では緑色で示されています。これは常に存在するとは限りません。添付の画像では、front-end
ワークロードは/catalogue/sock
APIに対してこのエッジを持っていますが、他API
のどのエッジも持っていません。
次に、すべてのワークロードペアのリストと、API
それらの間にあるノードのID(存在する場合)を取得します。私が試した暗号クエリは次のとおりです。
MATCH (w1)
MATCH (w1)-[awe:ACCESSES_WORKLOAD]->(w2 {deleted_time: -1})
OPTIONAL MATCH (w2)-[:CONTAINS_API]->(a:API)
OPTIONAL MATCH (w1)-[:ACCESSES_API]->(a)
OPTIONAL MATCH (w1)-[cae:CAUSES_ATTACK]->(a)
WHERE ID(w1) IN %s
RETURN DISTINCT awe, w1, w2, collect(ID(a)), collect(distinct cae.name)
私が期待していた出力は、次のような表でした。
w1 | w2 | API IDs List | Attack Name
======================================================================
front-end-node | user-node | [6 elements in a list] | null
orders-node | user-node | [2 elements in a list] | null
front-end-node | orders-node | [3 elements in a list] | null
front-end-node | some-node | [1 element in a list] | attack-name
しかし、私が得ているのは:
w1 | w2 | API IDs List | Attack Name
======================================================================
front-end-node | user-node | [8 elements in a list] | null
orders-node | user-node | [8 elements in a list] | null
front-end-node | orders-node | [3 elements in a list] | null
front-end-node | some-node | [1 element in a list] | attack-name
最初の2行では、のためにuser
ノード、私はすべてのリスト取得していますAPI
に含まれているのuser
ワークロードを、ちょうどないAPI
ことによってアクセスsのfront-end
とorders
。collect(ID(a))
全て集約されているAPI
と、ノードCONTAINS_API
とエッジ/関係w2 WORKLOAD
の代わりに、クエリ内API
のみでのSをACCESSES_API
有しますw1 workload
。
簡潔にするために期待値をJSONにマッピングする場合、必要な出力は次のようになります。
{
sourceWorkloadID: <ID(front-end)>
targetWorkloadID: <ID(user)>
apis: [ ID(/cards), ID(/register), ID(/addresses), ID(/customers/...)] // len here is six
attack: null
},
{
sourceWorkloadID: <ID(orders)>
targetWorkloadID: <ID(user)>
apis: [ ID(/cards/{cardsId), ID(/addresses/{addressesId})] // len here is two
attack: null
}, {3rd row}, {4th row}
誰かが暗号クエリを修正するのを手伝ってもらえますか?私はこれをredisgraph
経由で行っていcypher
ます。neo4jのみのクエリoptions / utils / helpersは使用できません。ありがとう。
これを行う方法は、APIMATCHと同じ行にエッジマッチングを行うことです。
MATCH (w1)
MATCH (w1)-[awe:ACCESSES_WORKLOAD]->(w2 {deleted_time: -1})
OPTIONAL MATCH (w2)-[:CONTAINS_API]->(a:API)<-[:ACCESSES_API]-(w1)
OPTIONAL MATCH (w1)-[cae:CAUSES_ATTACK]->(a)
WHERE ID(w1) IN %s
RETURN DISTINCT awe, w1, w2, collect(ID(a)), collect(distinct cae.name)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加