雰囲気で情報セキュリティをやってます.

第8回tktkセキュリティ勉強会に参加しました


第8回tktkセキュリティ勉強会にブロガー枠で参加しました.

私はもう5回ほど参加させていただいておりますが,毎度楽しい勉強会をありがとうございます〜! イベントページは下記になります.

tktksec.connpass.com

多少の自己解釈や後から調べた事項などを含みます(すみません)が, 以下講演メモになります.

当日マシントラブルでできなかった方向けに書いてみようと思ったのですが, わかりにくいところがあればお申し付けください...!

Maltego TransformでNEMを可視化してみよう!

講師はトレンドマイクロの新井悠さんです. アナライジング・マルウェア第二版出さんかいと言われていらっしゃるそうな... 新井さんの関わられている本の写真

新井さんの関わられている本の数々.

今回のアジェンダ

  • Maltegoの基本
  • Pythonで通信プログラムの作成
  • PythonでMaltego Local Transformサンプルの作成
  • NEMのMaltego Local Transformの作成

Maltegoというツールについてハンズオンが行われました

Maltegoって

もともとはアメリカの国防総省のRed Teamで使われていたりしたツールのようです.

Red Teamとは

組織内でのセキュリティについて,Red TeamとBlue Teamに分かれて運用されているところがあります.

日本だとRed Teamはあまりないそうですが,最近はリクルートなどの活動が有名だとか.

www.japandesign.ne.jp

OSINT

Red Teamの手法の一つです.一般的な定義は以下のサイトが参考になると思います.

securityblog.jp

ターゲットに関する公的な情報を収集し,収集した情報を端緒に攻撃を実施すること,と説明がありました.

私個人のイメージは,公開されている情報全てを集めて,情報を繋げていき, 相手の信用範囲に滑り込む等の用途で情報を活用したり,単に詳細な情報を保持したりするような感じです. 一番単純でやりやすく,かつ恐ろしい手法だなと思ってます.(人間のミスがとても出るところだと思うので...)

OSINTの例

  • 人材採用のページがあったら?
    • どんな人が募集されているのか調査し,「わたしWebエンジニア希望です,この添付ファイルをみてね」などメールを送り,人事に開けさせる
  • whoisデータベース
    • ドメイン名から組織情報を抜き出す.Maltegoならこういう情報を図式化してくれる.

試しにwhoisで適当なドメインの情報など調べてみると(Googlewhoisと調べると何件かwhois情報の検索サービスが出てきますので,どこかのサイトでドメインを入力して調査してみましょう),情報が縦にずらっと並べられますが,ちょっと見辛いですね.

Maltego

Paterva社の図式化ソフトウェアです. 情報(エンティティ)を別の情報に変換(トランスフォーム)することができます.(ここがMaltego独特の言い回しなので,注意です)

基本的にはスパイダーグラフ(網目状に情報が広がります)を使用して脅威の可視化を行います. 使用者が自分自身でなにか集める情報を指定しないと動いてくれないことに注意です. 文字だけの情報を図式化してくれることで,どんな人にもわかりやすく情報が伝わります.

Kali Linuxに入っているのはコミュニティエディション(CE)で,登録していれば誰でもつかえるものです.

Maltegoのまえに...

日本語キーボード化(US配列の方は不要)

日本語(JIS)キーボードを使われている方は ,Kali Linuxのキーマップを日本語キーボードにしましょう. ターミナルを開いて,

$setxkbmap jp

と入力してEnterです.

今回の講演のリポジトリを落としてくる

github.com

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のインストール

  1. まず検索ができるメニューを開きます(左端のアプリ欄の一番下の9つ四角が集まってるボタンを押すと開けます)
  2. Maltegoで検索するとリボルバーみたいなアイコンのソフトが見つかるので,それをクリックで開きます(これでMaltegoが開けます)
  3. 初めて開く場合,Maltegoのインストール画面が出てきます.CEバージョンをクリックして,
  4. ログイン(アカウント持ってなかったらregister hereをクリックしてブラウザを開き,アカウントをつくってから)
  5. あとのウィンドウはNextでOK

新しいグラフをつくる

Maltegoアイコンのとなりの Create new graph アイコンをクリックします.

Create new graph
Create new graph

クリックすると,以下のような画面になります.

New Graph
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アドレス
三つのドメインと対応するIPアドレスが表示された
どのドメインも同じIPアドレスと対応づけられていることがわかります.NICのアイコンなんですね〜

新井さんがどういう場合にMaltegoを使われるか

マルウェア解析時にIPアドレスドメインの情報などが出てきた際に,他のドメインがあるか?IPアドレスは?などを調査する際に使われるとか.

(私的には新井さん=アナライジング・マルウェアのイメージがあり,なぜMaltego?と思っていたのですが,腑に落ちました..)

また,KasperskyやShodan,Passive Total,Bitcoinなどデフォルトでは入っていないTransformもある(一部要課金)そうです. おまけとしてBitcoinのTransformについても触れられていました.(BitcoinのTransformについては,後で製作するNEMのTransformとほぼ使い方が同じであるため,割愛させていただきます)

NEMブロックチェーンにアクセスする

NEMにはRESTfulなAPIがあり,これを使うことでNEMに関する情報をJSON形式で手に入れることができます.

https://nemproject.github.io/

NEMAPIが持っている情報

下記のようなものがAPIを利用することで簡単に入手できます.

  • 死活管理
  • アドレスに関する情報
    • 入金情報
    • 出金情報
    • ネームスペース・モザイク
  • ブロックチェーンノードの情報

たのしい写経タイム!

Python3を利用してNEM APIを叩きます.

github.com

のなかのtest[1-4].pdfを書き写して, /home(任意の名前).py として保存します. (1ができたらコピーして2をつくり...とするとスムーズかもしれない)

各プログラムの実行方法

ターミナル上で $python3 test1.pyというふうに,Python3で実行しましょう(Kaliのデフォルトは2)

プログラムの流れ
  1. 単純にWebページにリクエストを送って結果をテキスト表示するスクリプト
  2. NEMの出金情報のURLにリクエストを送って結果を表示(jsonがばーっとでてくる)
  3. NEMの出金情報のURLにある情報をjson形式としてきれいに表示
  4. 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の図版のダウンロードはこちら↓

www.iconfinder.com

  1. 上部メニューから Entities をクリック
  2. Entities の項目内にある New Entitie type をクリック
  3. アイコン登録(プラスマークおさないとディスク上のファイルを選択できないので注意)
  4. あとはNextをクリック
  5. 最後のウィンドウのカテゴリ選択は Personal を選択

これで図版を登録できました

Transformをつくってみよう

MaltegoにはPython, Ruby, Goにバインディングがあるため,拡張機能をつくることが可能です.今回はPython3で拡張機能をつくります. しかし,MaltegoのバインディングはPython2にしか対応してないため,新井さんがPython3にむりやり対応させたものを書かれたそうですw

  1. 上部メニューバーからTransformをクリックします.
  2. New Local Transformをクリックします. メニューバーからTransform->New Local Transform
  3. Configure details
    • Displayname: test
    • Input entity type: Domain
    • (IDのとこが勝手に生成されるけどきにしない) Configure details
  4. 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をクリックしてみましょう.

ドメイン情報から"Hello world"が出る
Hello world!

ここまでできたら送金先調査のプログラムである nem-test1.py を書いてみましょう. 書けたら,左側のエンティティパレットから先ほど追加したNEMのエンティティをキャンバス(真ん中)に追加して,アドレスを入力します. 次に,NEMのエンティティを右クリックして,All Transform から NEM をクリックします.

あるアドレスの出金のトランザクションが可視化される様子
あるアドレスの出金のトランザクションが可視化される様子
送金先が可視化されました!

上級者向け課題

これができると,今度は矢印にタイムスタンプが,広がったNEMのエンティティのうち任意のアドレスのNEMをクリックすると送金額がわかるようになります. つくるには MaltegoTransform.py の中にある関数を使います.

  1. addAdditionalFields()を使って送金量を追加しなさい
  2. setLinkLabel()を使って送金日時を設定し,可視化しなさい

私はしばらく自分で考えてみてやってみたのですがうまくいかなかったので,一度他の方のソースコードを見てからやってみました...

NEMのエンティティにtimeStampと送金量が加わった様子
上級者向け課題を実装すると...
より情報量が多くなりますね.

もともとこれをやろうと思った理由

ご存知の方も多いと思いますが,Coincheck社に預けられていたNEMの不正送金事件がありました.

corporate.coincheck.com

このとき,世間でよく取り沙汰されたのが盗難NEMの行方を追いかけるホワイトハッカーの存在でして...

ホワイトハッカーになりたい様子
ホワイトハッカーに俺はなる()

ということのようです(?) (テレビで取り上げらえていた方も上記Maltegoの画面みたいに可視化を行われていたんですね)

※注意:"ホワイトハッカー"という言葉について突っ込まれそうですが,メディアで"ホワイトハッカー"と取り上げられていたために"ホワイトハッカー"という言葉を用いられているだけで,本来なら"ホワイトハットハッカー"と書くべきなのはあの会場にいた人間ならだいたい知っていると思いますので,これについての突っ込みは受けつけません...

新井さんの宣伝!

新井さんは大阪大学の非常勤講師で,今年からenpit ProSecというものをやってらっしゃるそうです.(社会人向けになります)

www.seccap.pro

実践CTFを新井さんが担当されてます!土日2日にわたってやる予定なので興味があれば参加してくださいとのことです.(単位認定もあるとか!)

感想

Maltego,実は使ったことないわけではなく,だいぶ前に少し使ったことがありまして(TrendMicroCTFの問題でMaltegoを使うものがあり,)

そのときはわりと闇雲に使っていたので「わからんな〜」となっていたところが大半でした.

今回具体的な使い方についていろいろお聞きしてみて,有用なツールだと感じました.可視化できると嬉しい.今後使っていきたい.

ちなみにMaltegoはWindowsMacでも使えます.(今回は環境を合わせるためにKaliにされたのかもですね)

https://www.paterva.com/web7/downloads.php

Transformをつくるコードは癖?を覚えれば書けるかもしれないので,新しくいろいろ追加できると良いですね〜あとなにを追加すれば楽しいだろうか?

ご講演ありがとうございました!

遊心さんのプリンの画像
tktkセキュリティ勉強会おなじみのおやつ.プリンですね〜

大阪北部地震について

この勉強会の翌日に高槻市震源とする最大震度6弱地震がありました.tktkセキュリティ勉強会には高槻市民の方や近隣にお住いの方が多数ご参加されていたと存じます.皆さまの今後の安全を祈念しております.

リンク

(もしここにまとめるのがまずい等ありましたらご連絡ください)

  • 主催のseraphさんのTogetterまとめ

togetter.com

  • 他の参加者の方の上級者向け課題のご回答

このブログは気の迷いで成り立つ予定です:)