Attack Tree を書いてみました RE: 第5回会合でご紹介したセキュリティ分析図作成ツール language-sad を公開しました

104 views
Skip to first unread message

Matsunami, Masaru (SDNA)

unread,
Aug 28, 2017, 10:38:34 AM8/28/17
to sig...@googlegroups.com
脅威分析研究会のみなさま

松並です。language-sadのMLにもPOSTしたのですが、
参加者がまだ少数なのでこちらにもPOSTします。

language-sadを使ってAttack Treeのサンプルを作ってみました。

そのPNG画像はこちら。こんな図がサクッと作れます。
https://raw.githubusercontent.com/masaru-matsunami/language-sad/master/samples/attack-tree.png

そのソースとなるattack-tree.sadはこちら。
// ------------------------------------------------------------------------
// Attack Tree example
// https://www.schneier.com/academic/archives/1999/12/attack_trees.html
// ------------------------------------------------------------------------

[1] Open Safe / 金庫を開ける
orig https:\/\/www.schneier.com/academic/archives/1999/12/attack_trees.html
expr or(2, 3, 4, 5)
[2] Pick Lock / 鍵をこじ開ける
[3] Learn Combo / 鍵の番号を知る
expr or(6, 7)
[6] Find Written Combo / 紙などに書いてある鍵の番号を探す
[7] Get Combo From Target / 金庫の関係者から鍵の番号を聞き出す
expr or(8, 9, 10, 11)
[8] Threaten / 脅す
[9] Blackmail / 弱みに付け込む
[10] Eavesdrop / 盗聴する
expr and(12, 13)
[12] Listen to Conversation / 会話を聞く
[13] Get Target to Sate Combo / 何らかの方法で鍵の番号を言わせる
[11] Bribe / 賄賂を渡す
[4] Cut Open Safe / 金庫を斬る
[5] Install Improperly / 攻撃者が開けられる細工をした金庫を予め設置しておく

末端ノードにtrue/falseを指定するとboolean計算できますけど、上記ではやってません。

ちなみにlanguage-sadはSTRIDE法やRWX法など特定の手法に依存するものではなく、
単なる命題間の論理関係を記述・表現するツールです。

--
松並 勝 <masaru.m...@sony.com>
Chief Security Technology Officer
ソニーデジタルネットワークアプリケーションズ株式会社



-----Original Message-----
From: sig...@googlegroups.com [mailto:sig...@googlegroups.com] On Behalf Of Matsunami, Masaru (SDNA)
Sent: Sunday, August 27, 2017 8:39 PM
To: 'sig...@googlegroups.com' <sig...@googlegroups.com>
Subject: [sigsta] 第5回会合でご紹介したセキュリティ分析図作成ツール language-sad を公開しました

脅威分析研究会のみなさま

松並です。第5回会合でご紹介しました「セキュリティ分析図作成ツール」ですが、
https://sites.google.com/view/sigsta/%E7%AC%AC5%E5%9B%9E%E4%BC%9A%E5%90%88
漸く、やっとのことで、Atomパッケージとして公開できました。
MITライセンスなので好き放題に改造していただけます。

Security Analysis Diagram language package https://atom.io/packages/language-sad/  ←★

注意点:
・Windows専用です。いまのところ。
・graphvizをインストールしてPATHをdot.exeに通す必要があります。
・ともあれ上記★のページを読んでください。

まだまだ恥ずかしいソースでバグもたくさんあると思いますが、
ご興味あるかたはぜひお使いいただきまして、
下記の雑談用MLにて雑談をいたしましょう。

language-sad雑談ML
https://groups.google.com/d/forum/language-sad
なお雑談には↑にて自ら「メンバー登録」していただくか、
わたし宛てにメールでご連絡ください。

いまのところboolean計算に特化したものになっていますが、
他のリスク値などの算出ができるようにもう少しリファクタリングが
必要だと思っていますが、まずは動かして遊んでみていただいて、
感想をいただけましたら幸いです。

松並 勝 <masaru.m...@sony.com>

--
このメールは Google グループのグループ「脅威分析研究会 SIGSTA」の登録者に送られています。
このグループから退会し、グループからのメールの配信を停止するには sigsta+un...@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

Kenji Taguchi

unread,
Aug 28, 2017, 11:45:45 PM8/28/17
to 脅威分析研究会 SIGSTA
松並様、

 アタックツリーのサンプル読んでみました。

 ツールに関する資料を読まずにコメントするのは失礼かもしれませんが、 AND OR ゲートに関して、このように表現されるのはなるほど、と思いました。また、ノード間を結ぶ曲線がかなり良いですね。チェンジビジョン社が astah* GSN を開発された時に、ノード間の線をこのような形にして欲しい(従来の GSN はこのような曲線なので)と要望したのを思い出します。

 ただ、 undef が良く分かりませんでした。通常の Fault Trees/Attack Trees などでは、それ以上発展させない、もしくは今後、発展させる予定として未発展ノード(Undeveloped Node) 、分析の最小単位である基本ノード(Basic Node)があります。それらとの関連が不明確でした。 undef の定義はどのようになっているのでしょうか?

田口

  


2017年8月28日月曜日 23時38分34秒 UTC+9 松並@事務局:
このグループから退会し、グループからのメールの配信を停止するには sigsta+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

Matsunami, Masaru (SDNA)

unread,
Aug 29, 2017, 1:01:48 AM8/29/17
to 脅威分析研究会 SIGSTA

田口先生、みなさま

 

松並です。ATのサンプルを見ていただいたのですね!ありがとうございます。

 

■ノード間の曲線

ノート間を結ぶ曲線はgraphvizが勝手に書いてくれるベジエ曲線です。

[7]-[9]の線が[7]-[8]の線に重なってしまうところはちょっと美しくありませんが、

簡単にノードの自動配置までやってくれるgraphvizは大変ありがたいです。

 

undefとは?

末端ノード(葉ノード)のundefに関してですが、下記URLFigure 1のように、

true(=possible)もしくはfalse(=impossible)と記述しておいたほうがよかったですね。

https://www.schneier.com/academic/archives/1999/12/attack_trees.html

(あとでAT図のサンプルを差し替えるかもしれません。)

 

このツールでは「すべての命題ノードはtrue()/false()/undef(不定)のいずれかの値を持つ」

という作りになっています。命題ノードの内容が成り立つかどうか不明な状態、つまり真か偽が

判断できる根拠がまだ見つかっていない状態を表現したくて、undefという値を使えるように

しています。システムを分析している途中は沢山のundef(設計確認しないと何とも言えない)

がありますので。

 

命題ノードの右端は子供があるノードの場合は親子関係のand/or/not/=を表示し、

末端ノードの場合はそのノード自身のtrue/false/undefを表示するようにしています。

上記URLFigure 1で言えば、PIを書くところにandorも書いていることに相当します。

これは単に見た目をシンプルにしたくて、こうした表現仕様にしています。

 

命題ノードの値はノードの色(青:true、赤:false、グレー:undef)で表現しています。

このAT図ではすべての命題ノードの値がundef(不定)なのですべてグレー色で描かれています。

 

命題ノードの値はどのように決定されるかというと、子供のノードがあるものについては、

子供ノード群のそれぞれの値とand/or/not/=の親子関係で決定されます。

末端ノードの値については、末端ノード自身にtrue/false/undefを記述者が割り当てることに

なっています。明示的に値を決めていない末端ノードは自動的にundef扱いになります。

 

■複数種類の値の表現・計算とか

現在のこのツールは、すべての命題が「true/false/undefという3つの状態をとる値」を持つ

という仕様になっていますが、上記URLFigure 6のように、SE/NSEの2状態をとる値、

コストをとる値といった、いろんな値の計算をしたくなると思います。こうした実験をできる

プロトタイピングのツールという位置づけで、このツールのソースを改造して使ってもらえたら

と思っています。

 

松並

このグループから退会し、グループからのメールの配信を停止するには sigsta+un...@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

--
このメールは Google グループのグループ「脅威分析研究会 SIGSTA」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには sigsta+un...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Kenji Taguchi

unread,
Aug 29, 2017, 3:45:35 AM8/29/17
to 脅威分析研究会 SIGSTA
松並様、

 現実逃避中です。。。

  undef の説明ありがとうございました。あまり関係無いとは思いますが、そうすると三値論理になっているなあ、と思いました。それが何かに使えるかどうかは、直ぐに何も浮かびませんが。。。

 私の方は、最近、中間ノードもっと、きちんとして値を入れた方が良いのではないかと思っています。そのような場合は、松並さんの記法では難しいかなあと思います(ゲート記号が書かれているので)。

田口
 
2017年8月29日火曜日 14時01分48秒 UTC+9 松並@事務局:

このグループから退会し、グループからのメールの配信を停止するには sigsta+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

--
このメールは Google グループのグループ「脅威分析研究会 SIGSTA」に登録しているユーザーに送られています。

このグループから退会し、グループからのメールの配信を停止するには sigsta+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Matsunami, Masaru (SDNA)

unread,
Aug 29, 2017, 4:55:16 AM8/29/17
to Kenji Taguchi, 脅威分析研究会 SIGSTA

田口先生、みなさま

 

undef の説明ありがとうございました。あまり関係無いとは思いますが、そうすると三値論理になっているなあ、と思いました。

それが何かに使えるかどうかは、直ぐに何も浮かびませんが。。。

 

松並です。はい3値論理です。andorは次のようにundefを扱っています。

undefは次のようなケースに使います。HTTPS通信をするシステムがあった場合、HTTPS技術を正しく

利用できているかどうかを下記のような5項目で調べている段階で、[5]の条件を満たせているのかどうか

まだ分からないときにundefして扱います。下図は、この段階では[1]は真になるか偽になるか分からない、

[5]の結果次第であるということを表現しています。後に設計者に確認することで真か偽が判明して[1]の値

が決定することになります。

 

 

ちなみに他のノードが1つでも偽であることが明らかとなれば、すべてのノードの値が分からなくても

[1]は偽になります。

 

私の方は、最近、中間ノードもっと、きちんとして値を入れた方が良いのではないかと思っています。

そのような場合は、松並さんの記法では難しいかなあと思います(ゲート記号が書かれているので)。

 

同意です。いろんな値の設定方法、計算方法、表現の方法が考えられまして、プロトタイピングで

試してみることが良いものを見つける早道であると思います。ということで、このツールのソースが

そうした試行に使えるようでしたら嬉しいと思っています。

 

ちなみに表記法の改造したい場合は、dot-writer.jsを改造してgraphvizdot言語の出力を改造する

ことでできます。

 

松並

 

 

From: sig...@googlegroups.com [mailto:sig...@googlegroups.com] On Behalf Of Kenji Taguchi
Sent: Tuesday, August 29, 2017 4:46 PM
To:
脅威分析研究会 SIGSTA <sig...@googlegroups.com>
Subject: Re: [sigsta] Re: Attack Tree
を書いてみました RE: 5回会合でご紹介したセキュリティ分析図作成ツール language-sad を公開しました

 

松並様、

 

 現実逃避中です。。。

このグループから退会し、グループからのメールの配信を停止するには sigsta+un...@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

--
このメールは Google グループのグループ「脅威分析研究会 SIGSTA」に登録しているユーザーに送られています。

このグループから退会し、グループからのメールの配信を停止するには sigsta+un...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

--
このメールは Google グループのグループ「脅威分析研究会 SIGSTA」に登録しているユーザーに送られています。

このグループから退会し、グループからのメールの配信を停止するには sigsta+un...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Kenji Taguchi

unread,
Sep 2, 2017, 10:18:39 AM9/2/17
to 脅威分析研究会 SIGSTA, kenji....@gmail.com
松並様、

 新しい例で示されたのが、攻撃では無くて防御策についてですので、若干、解釈等について違いが出てくるのではないかと思うのですが、ちょっと時間が空いてしまいましたが、以下の質問・コメントがあります。

> 松並です。はい3値論理です。andorは次のようにundefを扱っています。

 三値論理を利用する場合、 true、false 以外の三番目の値をどのように解釈するかは色々ありますが、 undef というのが良いかについては若干、検討が必要なのではないかと思いました。特にそれ以下の意味付けを見ると、何か他の適切な値の表現があるのではないかと思いました。

> 利用できているかどうかを下記のような5項目で調べている段階で、[5]の条件を満たせているのかどうか

> まだ分からないときにundefして扱います。


 後、根拠という新しいノードを追加され、それにより、基本ノードの真理値を判定されています。これは、GSN (Goal Structuring Notation)と非常に構造的に類似していると思いました。GSNにおいては、いくつか議論される点があり、例えば、以下について色々と議論されています。


1) GSN 図で表現されているものの Confidence Level をどのように計算するのか(様々な確率が提唱されています)

2)根拠の信頼度はどのように計測するのか


 例でみると、根拠が正しいので、基本ノード(ツリーの末端(リーフ)ノード)が true とされていますが、実際にはそこに色々な判断が入りそうな気がします(上記の 2))。


 私自身は、このような表記法は非常に有効だと思いますので、続けて議論させて頂けると幸いです。


田口



2017年8月29日火曜日 17時55分16秒 UTC+9 松並@事務局:

田口先生、みなさま

 

undef の説明ありがとうございました。あまり関係無いとは思いますが、そうすると三値論理になっているなあ、と思いました。

それが何かに使えるかどうかは、直ぐに何も浮かびませんが。。。

このグループから退会し、グループからのメールの配信を停止するには sigsta+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

--
このメールは Google グループのグループ「脅威分析研究会 SIGSTA」に登録しているユーザーに送られています。

このグループから退会し、グループからのメールの配信を停止するには sigsta+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

--
このメールは Google グループのグループ「脅威分析研究会 SIGSTA」に登録しているユーザーに送られています。

このグループから退会し、グループからのメールの配信を停止するには sigsta+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Reply all
Reply to author
Forward
0 new messages