第8回tktkセキュリティ勉強会に参加しました
第8回tktkセキュリティ勉強会にブロガー枠で参加しました.
私はもう5回ほど参加させていただいておりますが,毎度楽しい勉強会をありがとうございます〜! イベントページは下記になります.
多少の自己解釈や後から調べた事項などを含みます(すみません)が, 以下講演メモになります.
当日マシントラブルでできなかった方向けに書いてみようと思ったのですが, わかりにくいところがあればお申し付けください...!
Maltego TransformでNEMを可視化してみよう!
講師はトレンドマイクロの新井悠さんです. アナライジング・マルウェア第二版出さんかいと言われていらっしゃるそうな...
今回のアジェンダ
Maltegoというツールについてハンズオンが行われました
Maltegoって
もともとはアメリカの国防総省のRed Teamで使われていたりしたツールのようです.
Red Teamとは
組織内でのセキュリティについて,Red TeamとBlue Teamに分かれて運用されているところがあります.
- Red Team: 脆弱性の発見,侵入活動,ソーシャルエンジニアリング
- Blue Team: 脆弱性の修正・対応,侵入活動の発見・回復,利用者の啓発
日本だとRed Teamはあまりないそうですが,最近はリクルートなどの活動が有名だとか.
OSINT
Red Teamの手法の一つです.一般的な定義は以下のサイトが参考になると思います.
ターゲットに関する公的な情報を収集し,収集した情報を端緒に攻撃を実施すること,と説明がありました.
私個人のイメージは,公開されている情報全てを集めて,情報を繋げていき, 相手の信用範囲に滑り込む等の用途で情報を活用したり,単に詳細な情報を保持したりするような感じです. 一番単純でやりやすく,かつ恐ろしい手法だなと思ってます.(人間のミスがとても出るところだと思うので...)
OSINTの例
- 人材採用のページがあったら?
- どんな人が募集されているのか調査し,「わたしWebエンジニア希望です,この添付ファイルをみてね」などメールを送り,人事に開けさせる
- whoisデータベース
- ドメイン名から組織情報を抜き出す.Maltegoならこういう情報を図式化してくれる.
試しにwhoisで適当なドメインの情報など調べてみると(Googleでwhoisと調べると何件かwhois情報の検索サービスが出てきますので,どこかのサイトでドメインを入力して調査してみましょう),情報が縦にずらっと並べられますが,ちょっと見辛いですね.
Maltego
Paterva社の図式化ソフトウェアです. 情報(エンティティ)を別の情報に変換(トランスフォーム)することができます.(ここがMaltego独特の言い回しなので,注意です)
基本的にはスパイダーグラフ(網目状に情報が広がります)を使用して脅威の可視化を行います. 使用者が自分自身でなにか集める情報を指定しないと動いてくれないことに注意です. 文字だけの情報を図式化してくれることで,どんな人にもわかりやすく情報が伝わります.
Kali Linuxに入っているのはコミュニティエディション(CE)で,登録していれば誰でもつかえるものです.
Maltegoのまえに...
日本語キーボード化(US配列の方は不要)
日本語(JIS)キーボードを使われている方は ,Kali Linuxのキーマップを日本語キーボードにしましょう. ターミナルを開いて,
$setxkbmap jp
と入力してEnterです.
今回の講演のリポジトリを落としてくる
zipでダウンロードしても良いですし, ターミナル上で
$ git clone https://github.com/nenaiko-dareda/maltego_training.git
などでもダウンロードできます.Forkしても良いですね.
Tips
(単に私が困ったので書いておきます)
私はKali Linuxの環境をMacの上にVirtual BoxでVMを立てたのですが,Macでウィンドウ切り替えしてたらVM内のカーソルがなくなった!ということが頻発しました;;
VMの画面を一旦閉じて(警告ウィンドウが出てきますが,またすぐ開くのであればサスペンド(一番上部の項目)でOKだと思います) そのあと再度VMを起動すればカーソルが復活します.
KaliにMaltego CEのインストール
- まず検索ができるメニューを開きます(左端のアプリ欄の一番下の9つ四角が集まってるボタンを押すと開けます)
- Maltegoで検索するとリボルバーみたいなアイコンのソフトが見つかるので,それをクリックで開きます(これでMaltegoが開けます)
- 初めて開く場合,Maltegoのインストール画面が出てきます.CEバージョンをクリックして,
- ログイン(アカウント持ってなかったらregister hereをクリックしてブラウザを開き,アカウントをつくってから)
- あとのウィンドウはNextでOK
新しいグラフをつくる
Maltegoアイコンのとなりの Create new graph
アイコンをクリックします.
クリックすると,以下のような画面になります. 一番使うのは左側のエンティティパレットですね.
エンティティパレットの,Infrastructureという項目からDomainをドラッグし,キャンバス(真ん中の白い部分)にドロップします.
デフォルトでは paterva.com
が入力されています.Paterva社のドメインですね.
この部分を書き換えると,他のドメインについても調査できます.
先ほどドロップしたドメインのマークをクリックし,右クリックでメニューを開きます.
メニューの中から All Transforms
をクリックしてこのドメイン情報に用意されている全てのトランスフォームを見てみます.
その中から,To DNS Name - interested - [using DB]
をクリックします.(興味深そうなサブドメインをDBから探すということ?)
見た目上はアイコンをクリックしているだけですが,バックグラウンドではちゃんと通信が発生しています(Maltego画面下部のOutputをみるとわかりやすいかもしれません)
通信してること自体ばれたらまずい場合(そんなことあるんだろうか?)にMaltegoを使う際は注意しないといけなさそうですね.
次に,出てきた三つのドメインをすべて選択して(範囲指定をする感じですべて選択できます),右クリックし,All Transform
内の To IP Address [DNS]
をクリックします.
どのドメインも同じIPアドレスと対応づけられていることがわかります.NICのアイコンなんですね〜
新井さんがどういう場合にMaltegoを使われるか
マルウェア解析時にIPアドレスやドメインの情報などが出てきた際に,他のドメインがあるか?IPアドレスは?などを調査する際に使われるとか.
(私的には新井さん=アナライジング・マルウェアのイメージがあり,なぜMaltego?と思っていたのですが,腑に落ちました..)
また,KasperskyやShodan,Passive Total,Bitcoinなどデフォルトでは入っていないTransformもある(一部要課金)そうです. おまけとしてBitcoinのTransformについても触れられていました.(BitcoinのTransformについては,後で製作するNEMのTransformとほぼ使い方が同じであるため,割愛させていただきます)
NEMのブロックチェーンにアクセスする
NEMにはRESTfulなAPIがあり,これを使うことでNEMに関する情報をJSON形式で手に入れることができます.
NEMのAPIが持っている情報
下記のようなものがAPIを利用することで簡単に入手できます.
- 死活管理
- アドレスに関する情報
- 入金情報
- 出金情報
- ネームスペース・モザイク
- ブロックチェーンノードの情報
たのしい写経タイム!
のなかのtest[1-4].pdfを書き写して, /home
に (任意の名前).py
として保存します.
(1ができたらコピーして2をつくり...とするとスムーズかもしれない)
各プログラムの実行方法
ターミナル上で $python3 test1.py
というふうに,Python3で実行しましょう(Kaliのデフォルトは2)
プログラムの流れ
- 単純にWebページにリクエストを送って結果をテキスト表示するスクリプト
- NEMの出金情報のURLにリクエストを送って結果を表示(jsonがばーっとでてくる)
- NEMの出金情報のURLにある情報をjson形式としてきれいに表示
- 3から,transaction->recipientの情報を抜き出す(つまりログの送金先の部分だけ抜き出している)
という感じ?
注意点
APIにはDoS対策がかかっており,同じドメインにリクエストを送り続けると接続制限がかかります. 下記負荷分散用のドメインがあるので,プログラムの一部(url変数のドメイン部分)を適宜書き換えてください.
http://62.75.171.41:7890 http://san.nem.ninja:7890 http://go.nem.ninja:7890 http://hachi.nem.ninja:7890 http://jusan.nem.ninja:7890 http://nijuichi.nem.ninja:7890 http://alice2.nem.ninja:7890 http://alice3.nem.ninja:7890 http://alice4.nem.ninja:7890 http://alice5.nem.ninja:7890 http://alice6.nem.ninja:7890 http://alice7.nem.ninja:7890
URLの意味について
http://(domain)/accounts/transfer/outgoing/hoge
というURLがあったとすると,これはhogeの出金情報を意味します.
JSON形式で出てくるNEMの情報について
test3.py
を実行すると,そのアドレスが持っている出金情報についてJSON形式でみることができます.取引(トランザクション?)の個数分だけ入れ子構造になっている状態です.
ここで注意として, timestamp
という項目ですが,UNIXTIMEではなく,NEM独自のフォーマットになっています.(NEMのブロックチェーンが最初につくられてから何秒たったか?ということのようです)
https://nemproject.github.io/#account-related-requests
図版をエンティティに登録する
NEMの図版のダウンロードはこちら↓
- 上部メニューから
Entities
をクリック Entities
の項目内にあるNew Entitie type
をクリック- アイコン登録(プラスマークおさないとディスク上のファイルを選択できないので注意)
- あとはNextをクリック
- 最後のウィンドウのカテゴリ選択は
Personal
を選択
これで図版を登録できました
Transformをつくってみよう
MaltegoにはPython, Ruby, Goにバインディングがあるため,拡張機能をつくることが可能です.今回はPython3で拡張機能をつくります. しかし,MaltegoのバインディングはPython2にしか対応してないため,新井さんがPython3にむりやり対応させたものを書かれたそうですw
- 上部メニューバーからTransformをクリックします.
- New Local Transformをクリックします.
- Configure details
- Displayname: test
- Input entity type: Domain
- (IDのとこが勝手に生成されるけどきにしない)
- Commandline
- command: /usr/bin/python3
- Parameter: test-maltego.py
- Working directory: (test-maltego.pyが置いてあるディレクトリ:例では
/root/maltego_training
)
※注意:test-maltego.pyが置いてあるディレクトリにgithubのリポジトリ内のMaltegoTransform.py
を入れること
あとは,test-maltego.pyを書きます.(test-maltego.pyは同名のpdfファイルに記載)
書けたら,Maltego上に戻ります.先ほどのドメインの情報(地球儀のようなマーク)の上で右クリックして,All Transform
からtest
をクリックしてみましょう.
ここまでできたら送金先調査のプログラムである nem-test1.py
を書いてみましょう.
書けたら,左側のエンティティパレットから先ほど追加したNEMのエンティティをキャンバス(真ん中)に追加して,アドレスを入力します.
次に,NEMのエンティティを右クリックして,All Transform
から NEM
をクリックします.
送金先が可視化されました!
上級者向け課題
これができると,今度は矢印にタイムスタンプが,広がったNEMのエンティティのうち任意のアドレスのNEMをクリックすると送金額がわかるようになります.
つくるには MaltegoTransform.py
の中にある関数を使います.
- addAdditionalFields()を使って送金量を追加しなさい
- setLinkLabel()を使って送金日時を設定し,可視化しなさい
私はしばらく自分で考えてみてやってみたのですがうまくいかなかったので,一度他の方のソースコードを見てからやってみました... より情報量が多くなりますね.
もともとこれをやろうと思った理由
ご存知の方も多いと思いますが,Coincheck社に預けられていたNEMの不正送金事件がありました.
このとき,世間でよく取り沙汰されたのが盗難NEMの行方を追いかけるホワイトハッカーの存在でして...
ということのようです(?) (テレビで取り上げらえていた方も上記Maltegoの画面みたいに可視化を行われていたんですね)
※注意:"ホワイトハッカー"という言葉について突っ込まれそうですが,メディアで"ホワイトハッカー"と取り上げられていたために"ホワイトハッカー"という言葉を用いられているだけで,本来なら"ホワイトハットハッカー"と書くべきなのはあの会場にいた人間ならだいたい知っていると思いますので,これについての突っ込みは受けつけません...
新井さんの宣伝!
新井さんは大阪大学の非常勤講師で,今年からenpit ProSecというものをやってらっしゃるそうです.(社会人向けになります)
実践CTFを新井さんが担当されてます!土日2日にわたってやる予定なので興味があれば参加してくださいとのことです.(単位認定もあるとか!)
感想
Maltego,実は使ったことないわけではなく,だいぶ前に少し使ったことがありまして(TrendMicroCTFの問題でMaltegoを使うものがあり,)
そのときはわりと闇雲に使っていたので「わからんな〜」となっていたところが大半でした.
今回具体的な使い方についていろいろお聞きしてみて,有用なツールだと感じました.可視化できると嬉しい.今後使っていきたい.
ちなみにMaltegoはWindowsやMacでも使えます.(今回は環境を合わせるためにKaliにされたのかもですね)
https://www.paterva.com/web7/downloads.php
Transformをつくるコードは癖?を覚えれば書けるかもしれないので,新しくいろいろ追加できると良いですね〜あとなにを追加すれば楽しいだろうか?
ご講演ありがとうございました!
大阪北部地震について
この勉強会の翌日に高槻市を震源とする最大震度6弱の地震がありました.tktkセキュリティ勉強会には高槻市民の方や近隣にお住いの方が多数ご参加されていたと存じます.皆さまの今後の安全を祈念しております.
リンク
(もしここにまとめるのがまずい等ありましたらご連絡ください)
- 主催のseraphさんのTogetterまとめ
- 他の参加者の方の上級者向け課題のご回答
syakesabaさん github.com
KatsutoshiOtogawaさん github.com