//あとで書く

です・ます調が記事によって違ったりするブログ

exitmapについて

はじめに

TorがOnionRoutingという仕組みで秘匿性を保っていることは既に皆さんご存知かと思います.そしてOnionRoutingにおいて,Torネットワークからクリアネット(非Torネットワーク)への架け橋となる出口ノード(ExitNode)の存在は非常に重要で,エンドtoエンドでの暗号化通信を行っていない場合,ExitNodeにはクライアントの通信内容が筒抜けになります.Torネットワークの各ノード(EntryNode,BridgeNode,RelayNode,ExitNode)は誰でもなることができるため,悪意をもって盗聴や改ざんを行うExitNodeの存在が非常に脅威となります.そこで,今回は悪意のあるExitNodeや,そういった疑いのあるExitNodeを探索するツールであるexitmapについて紹介します.

exitmap

exitmapはスウェーデンのカールスタード大学 PriSecグループとオーストリアのSBA Researchの共同研究によって2014年に開発されたもののようです. Pythonベースのプログラムになっており,内部的にStemを使用しているため,Tor本体をインストールしておく必要があります.

https://www.cs.kau.se/philwint/spoiled_onions/ github.com

イメージとしては,exitmap内でモジュール(例えば,ファイルのダウンロード・Webサーバへの接続等を行うモジュール)が評価対象のExitNodeを通じて実行され,その実行結果からNegative/Positiveを判定する感じです.モジュールは各自で開発することもできます.

使ってみる

環境

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.10
DISTRIB_CODENAME=yakkety
DISTRIB_DESCRIPTION="Ubuntu 16.10"
$ uname -mr
4.8.0-52-generic x86_64

インストー

$ git clone https://github.com/NullHypothesis/exitmap
$ cd exitmap
$ pip install -r requirements.txt
$ cd ..

使い方

$ ./exitmap/bin/exitmap (モジュール名) のように指定します.デフォルトで入っているモジュールには以下のようなものがあります.

  • checktest
    • https://check.torproject.org/に接続し,Torと判定されるかチェックする.(ExitNodeがプロキシを刺しているかチェックする)
  • testfds
    • 単純なWebページの内容を取得できるかチェックする.(ExitNodeのファイルディスクリプタが正しく機能しているかチェックする)
  • dnspoison
    • 名前解決を行い,受信したAレコードと予想されるAレコードの比較を行う.(ExitNodeがDNSスプーフィングを行っているかチェックする)
  • dnssec
    • ExitNodeがDNSSECを検証するかどうかチェックする.
  • patchingCheck
    • ファイルのダウンロードを行い,改ざんをチェックする.
  • cloudflared
  • rtt
    • RTTをチェックする.

正直なところ,各モジュールの役割についてはソースコードを読んだ方が早いです.モジュールは./exitmap/src/modules/以下に配置されています. また,exitmap本体にもいくつかのオプションがあります.詳細はhelpオプションで確認できるので,ここではいくつかの重要なオプションについて紹介します.

  • --country [Country Code]
    • ExitNodeの国を指定するオプションです.日本であればJPのように指定します.
  • --first-hop [FingerPrint]
    • EntryNode(first hop)を20バイトのフィンガープリントで指定します.
  • --exit [FingerPrint]
    • ExitNodeを20バイトのフィンガープリントで指定します.
  • --build-delay [Seconds]
    • Torのサーキットを生成する際に任意の秒数間休止します.

以下の例は全ての出口ノードに対してdnspoisonモジュールを実行した例です.今回はDNSスプーフィングの疑いのあるExitNodeは発見できませんでした.

https://gist.github.com/epcnt19/84d753545ac715a569e31cc44fed883f#file-exitmap

おわりに

悪意のあるExitNodeを発見するためには,exitmapによる継続的なスキャンや,モジュールの拡張・自作を行う必要がありそうです.ただし,継続的なスキャンという点に関してはスキャンがTorネットワークへ負荷を与えているという点に注意する必要があります.

独り言

全出口ノード数は800〜900程度だそうですが,案外少なくないですか(調べてみたら,ここ数年で結構減少してるっぽい)

https://metrics.torproject.org/relayflags.html

DECAFの環境構築

DECAFの環境を構築したので,再度構築する時のための自分用メモ.
github.com

環境

  • ホストOS Ubuntu16.10(LTS) 64bit
  • ゲストOS① Ubuntu14.04(LTS) 64bit
  • ゲストOS② Windows XP 32bit

ホストOSの上でゲストOS①を動作させ(Virtualbox),その上でゲストOS②を動作させる(DECAF(QEMU)). ホストOS上で直接DECAFを動作させなかったのは、Ubuntu16.10上でのビルドが上手く行かなかったためで,現在原因調査中.

パッケージのインストー

$ sudo apt-get update
$ sudo apt-get install qemu binutils-dev libboost-all-dev
$ sudo apt-get build-dep qemu
$ sudo apt-get -y install build-essential linux-headers-$(uname -r)
$ sudo apt-get install zlib1g-dev libssl-dev libncurses5-dev
$ sudo apt-get install libcurl4-openssl-dev libexpat1-dev libreadline-gplv2-dev
$ sudo apt-get install uuid-dev libfuse-dev bzip2 libbz2-dev git
$ sudo apt-get -y install automake1.9 autoconf libtool
$ git clone https://github.com/sycurelab/DECAF
$ cd DECAF/decaf
$ ./configure
$ make
$ cd ..

イメージの作成

  • WindowsXP(modernIE)のVMware用イメージをダウンロードした.
  • VMWare用イメージ(vmdk)をqcow2イメージに変換したものでDECAFを起動しようとしたところ,No bootable deviceと出てしまい,ブートできなかった.原因調査中.
  • qcow2イメージではなく,rawイメージに変換したものを使用したところ,問題なく起動できた.

$ unzip IE8.XP.For.Windows.VMware.zip
$ qemu-img convert -f vmdk -O raw IE8_-_WinXP-disk1.vmdk winxp.img
$ ./decaf/i386-softmmu/qemu-system-i386 -monitor stdio -drive file=./winxp.img

さいごに

今後は以下を参考にプラグイン開発をやっていく予定.

追記

https://groups.google.com/forum/#!topic/decaf-platform-discuss/iLw8E7p559w

参考

記念撮影

f:id:epcnt19:20170501140856p:plain

onionアドレスの生成に関して

TorのHiddenServiceの識別子として用いられるonionドメインのアドレス(以下,onionアドレス)ですが,どのように生成されるのか気になったので調べました.

仕組み

知りたかったことは以下の記事にほとんど載っていました.

上記の記事によると,

  1. RSA(1024bit)の公開鍵と秘密鍵のキーペアを作成する.
  2. 公開鍵をDERエンコードする.
  3. DERエンコードされた公開鍵からSHA1ハッシュ(160bit)を生成する.
  4. 生成したハッシュ値の前半半分(80bit)を取り出し,Base32エンコードする.

という手順で生成しているようです.Base32は40bitを8文字に変換するエンコード方式で,80bitのハッシュ値から16文字の文字列にエンコードされ,これがonionアドレスとなるようです.一般的な手順でHiddenServiceの設定を行った場合,Tor側が自動でonionアドレスと秘密鍵を生成してくれます.ちなみにこれらはtorrcのHiddenServiceDir項目で指定したパスの配下にhostname,private_keyという名前で生成されます.

任意の文字列をonionアドレスにしたい

例えば,facebookcorewwwi.onion(FacebookのHiddenService)のように任意の文字列をonionアドレスに指定するための方法ですが,指定したパターンが出現するまでキーペアを生成し続ける(ブルートフォース)作業を行うことによって実現できます.そのようなツールは既にいくつも存在して,Shallotやscallionが有名なようです.

github.com github.com

試しにShallotでアドレスを生成してみたところ,1-5文字程度であればある程度高速にonionアドレスを算出できました.ちなみに,facebookcorewwwi.onionは8文字ですから一般的なマシンでのブルートフォースではまず不可能でしょう.

おわりに

TorのHiddenService,RelayNode,ExitNodeの設定方法をブログに書いていなかったのでそのうち書きます.とはいえ,HiddenService,RelayNodeに関しては以下のページに基本的な設定方法がある程度説明されているので,自分のメモ用程度にしか需要はないと思いますが.

Hidden Service - Hideki Saito Wiki Japanese
Linuxに安全にtorリレーをインストールする方法 - Qiita
Ubuntu14/CentOS6xにtor入れてrelayサーバーにする - Qiita

ブロックチェーン基盤に関するポエム

これはPDC Advent Calendar 201618日目の記事です.
前日はsiteさん(id:poketore-tech)による,HDDのファイルシステムについてでした.

はじめに
本記事では,ブロックチェーン基盤の概要について書いていきます.最近,自分の中で仮想通貨がブームになっており,有名な仮想通貨であるビットコイン(以下,BTCと書きます)の技術について調べている時間が多くありました.調べているうちにブロックチェーンやブロックチェーン基盤であるEthereum・BitcoinCoreというワードを発見したのでそれらについてのメモだと思って下さい.

ブロックチェーンとはなにか
ブロックチェーンとは「分散型台帳システム」と呼ばれていて,BTCではこの技術が大きく関係しています. ただ,BTC=ブロックチェーンという訳ではありません.BTCを構成する上で重要な技術基盤がブロックチェーンということです. 分散型台帳とは,Excelのデータシートのようなものが,P2P*1によって分散的に管理されている様子を想像してください. データシートに誰かが何かを入力すると他のノードのデータシートもネットワーク越しに更新されます. ただ,二重更新や悪意を持った更新が行われると困るので,承認のためのアルゴリズム*2が存在します.基本的にはこれだけです.

BTCとブロックチェーンの関係

BTCでは決済時に決済データ(トランザクション)をP2Pネットワークにブロードキャストします.トランザクションを受け取った各ノードは複数のトランザクションを1つのブロックという単位にまとめようとします.最も早くブロックを作成できたノードはブロックをネットワークにブロードキャストします.ブロックを受け取ったノードは電子署名によってブロックの信憑性を確かめ,正しさを確認できた場合はブロックを鎖状に連結します.この一連の働きをマイニング(採掘)といい,承認を表します.BTCにおいて,この連結されたブロック(ブロックチェーン)がデータシート(台帳)にあたるわけです.

BTCの詳細については中本哲史氏*3の論文を読んで下さい.原論文は英語ですが,有志の方により日本語化されています.
原論文
日本語版

また,書籍では「暗号技術入門 第3版 秘密の国のアリス」にBTCに関する加筆がなされているので読んでみて下さい.去年私がリクエストしたのでLiSAの図書室にあるはず.

暗号技術入門 第3版 秘密の国のアリス

暗号技術入門 第3版 秘密の国のアリス

Bitcoinの技術的側面に着目した本では,MasteringBitcoinの翻訳版である「ビットコインとブロックチェーン:暗号通貨を支える技術」が良いと聞きます.私はまだ読んでいないのでどなたか買って下さい.
ビットコインとブロックチェーン:暗号通貨を支える技術

ビットコインとブロックチェーン:暗号通貨を支える技術

BitcoinCoreを使ってみる
さて,本記事の主題はBTCについてではなく,ブロックチェーンについてでした.ブロックチェーン技術を提供する基盤(ブロックチェーン基盤)としては上記に書いた通り,BitcoinCoreやEthereumが有名です.BitcoinCoreはBTCクライアントのリファレンス実装で,Ethereumは分散アプリケーションプラットフォームです.承認方法がProof of Workであることやパプリック型ブロックチェーンであることから,(私の中の感覚では),両者は似ていると思います.今回はBitcoinCoreを使ってローカル内にテストネット*4を構築し,送金やマイニングを行います.Ethereumやスマートコントラクトについては次回以降の記事に書いていきます.

実行環境は以下の通りです.

$cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"
$uname -mr
Linux 3.13.0-100-generic x86_64

環境構築の詳細については割愛します.以下のリンクを参考に構築しました.
http://fintechjapan.jp/articles/tec_bitcoind001.html
まず,bitcoindデーモンを起動します.
$bitcoind -regtest -daemon
次にブロック生成によって報酬を貰い,送金用のコインを獲得します.今回は適当に500ブロック生成したことにします.
$bitcoin-cli -regtest generate 500
現在の残高を確認します.ブロックを生成した報酬として12462.5BTC獲得しています.この記事を書いている2016年12月17日時点では,1BTC=93708.32 JPYとなっていますので1167839938円,およそ11億円獲得しました.すごい.

$bitcoin-cli -regtest getbalance
12462.50000000

次にアカウントを作成し,そのアカウントに対してコインを送金を行います.今回は適当に100BTC送金します.

$bitcoin-cli -regtest getnewaddress epcnt19
n3XV7ngar6RqTT7niZCn1UbmuyVfukXCXo
$bitcoin-cli -regtest sendtoaddress n3XV7ngar6RqTT7niZCn1UbmuyVfukXCXo 100
d064cb4c3ed9bcfd73b5922224a4ada9f0afd6ca4822787e7910969980e35813

この時点ではまだ送金処理は完了していません.なぜなら,マイニングによる承認がなされていないからです.マイニングを行い処理を確定させます.

$bitcoin-cli -regtest generate 1
[
  "2bc00687f82dfd2ca2edb12e3b04b3d41d833901f923807415d1a314978d70e6"
]

これでブロックが生成されたので,「アカウントepcnt19に100BTC送金する」というトランザクションが承認されたはずです.

$bitcoin-cli -regtest getbalance epcnt19
100.0000000

これで私(epcnt19)は100BTC,およそ900万円手に入れました.

おわりに
ブロックチェーンについて書くはずが,いつのまにかBTCについての話になってしまいました.ブロックチェーンの発祥はBTCですが,現在は色々なところでブロックチェーンの適応実験が行われているそうです.スマートコントラクトの話は次回以降の記事に書くことにします.これらの話が入ってくると,ブロックチェーンの本質が見えてくるはずです.ちなみに偉そうに記事を書いていますが,私はBTCのアカウントを持っていません.ただ,BTCの自動売買プログラムが今非常に面白いと感じていて,近いうちに始めたいと思っています.

明後日はCanninet_onlineさん(id:Canninet)による,「戦車日記 序章」です.

参考

ビットコイン 日本円(BTC JPY) コンバータ-Investing.com
NTT DATA BLOCKCHAIN INNOVATION|NTTデータ
bitcoin-cliを使ったBitcoinAPI入門 - Qiita
Bitcoinプログラミングの入り口 – blockchain

*1:Peer to Peerの略.主な種類として,ノード探索時に管理サーバに問い合わせるハイブリッドP2P方式と,探索自体も分散的に行うピュアP2P方式がある.

*2:Proof of Work(PoW)やPBFTが有名

*3:ビットコインの発明者.名前は日本人だが偽名であるとの見方が強い.実際の正体は不明.

*4:これをRegtestモードという

Dockerのメモ

DockerでApache2を起動するまでの自分用メモ.
自分用なのでQiitaとかの入門用記事を適当にまとめただけ.
環境は以下の通り

$cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"
$uname -mr
Linux 3.13.0-100-generic x86_64

Dockerのインストール

$wget -qO- https://get.docker.com/ | sh
$sudo usermod -aG docker $USER

2行目は現在のユーザをdockerグループに追加している.dockerを実行するには(ソケットファイルにアクセスするためには),rootかdockerグループに 所属している必要があるので,必要であれば追加する.毎回sudoを付けて実行するのであれば追加する必要なし.
インストール後にバージョンを確認した.バージョンは以下の通り

$ docker version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 21:44:32 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 21:44:32 2016
 OS/Arch:      linux/amd64

イメージとコンテナの操作

イメージを検索する(今回はubuntu14.04のイメージに関する検索).
$docker search ubuntu:14.04

イメージを取得する.
$docker pull ubuntu:14.04

手元のイメージ一覧を表示する.
$docker images

イメージを実行する(コンテナを作成する).
$docker run -i -t ubuntu:14.04 /bin/bash
フォアグラウンドモードで起動する場合は-i,-tオプションと/bin/bashを指定する.これを指定すると実行した端末でコンテナが操作できるようになる.詳しくは参考リンクのリファレンスを参照.今回はホストの8080番ポートからコンテナの80番ポートへフォワーディングしたいので,以下のようにする.
$docker run -p 8080:80 -it ubuntu:14.04 /bin/bash

実行中のコンテナを表示する.
$docker ps

実行中のコンテナへ入る.
$docker exec -it [コンテナID] /bin/bash

実行中のコンテナを停止する.
$docker stop [コンテナID]

停止中のコンテナを開始する.
$docker start [コンテナID]

コンテナを削除する.
$docker rm [コンテナID]
ちなみに以下のシェルスクリプトでコンテナを一斉削除できる.
$docker ps -a | awk '{print $1}' | tail -n +2 | xargs docker rm

イメージを削除する.
$docker rmi [イメージID]

コンテナを複製(コミット)する.
$docker commit [コンテナID] イメージ名

Dockerfileを書く

以下の様なDockerfileを作り,buildコマンドを実行すると,apache2がデフォルトでインストールされていて80番ポートが解放されているubuntu14.04イメージ(webserver)が生成される.

$mkdir -p docker/ubuntu1404
$cd docker/ubuntu1404
$touch Dockerfile
$vim Dockerfile

FROM ubuntu:14.04

RUN apt-get update
RUN apt-get -y install apache2

EXPOSE 80

$docker build -t webserver .

おわりに

以上のように操作すると,ホストの8080番ポートへアクセスすればApache2のindex.htmlが表示されるはず.Apache2の起動時に「Could not reliaby determine the server's fully qualified domain name...」出てコケた場合はServrerNameに使用したアドレス(127.0.0.1等) によってFQDNのエラーが発生している.そのため,/etc/apache2/apache2.confにServerNameを追加し,そのServerNameを/etc/resolv.confによって解決させる.

参考リンク

Docker ドキュメント日本語化プロジェクト — Docker-docs-ja 1.12.RC ドキュメント
DockerのUbuntu14.10の日本語化環境イメージを作成(Ubuntu) | BROKENDISH
http://d.hatena.ne.jpg.com/entry/2014/10/09/002750
http://inaz2.hatenabloa2chan/items/e9aa408244687a63a0ae
http://qiita.com/tif/Kazuhira/20150628/1435482419
Dockerでcommitしてみる - Qiita
[docker] コンテナを一括削除 - Qiita
Dockerコンテナの作成、起動〜停止まで - Qiita
起動中の docker コンテナのシェルに入る - Qiita
ubuntu 14.04にDockerをインストール - Qiita
Dockerでapacheを動かす - in the mythosil
Dockerコンテナへの入り方 - あるシステム管理者の日常
Apacheのエラー:Could not reliably determine the server’s fully qualified domain name… | Weblogy

セキュリティ・キャンプ in 福岡 2016 に参加してきた

はじめに
9月17〜19日にLINE Fukuoka株式会社で開催されたセキュリティキャンプ九州大会に参加してきた. 大会の概要や詳しい情報はこちらを参照して頂きたい. 今回の記事では講義で教わった技術的な内容について書いていきたい(とはいえ公開可能な部分のみではあるが)

1日目1講義目「セキュリティ・キャンプ九州 オープニング」
グループでチーム名,キャンプを通しての目標などを決めた.

1日目2講義目「機械学習とセキュリティ:特徴抽出講座」
攻撃*1機械学習で学習・検知するにあたって,「何を特徴とするか」という点についてグループで話し合った. 自分達のグループは,VBA/VBS型の悪性マクロ/スクリプトの特徴について考えた.結論として「コード中に通信(HTTP,FTP)やファイル操作を行うメソッド名」を特徴とする,という意見にまとまった.しかし,ファイル操作を行う正常なマクロ/スクリプトは存在するだろうし,難読化問題もあり,実際に実装するとすれば,まだ問題が沢山ありそうである.
ちなみに,攻撃の学習・検知のためのアルゴリズムサポートベクターマシンやランダムフォレストがよく用いられているらしい.とはいえ,どのアルゴリズムが良いという議論云々より,良質なデータの採取と検知したい物の性質を的確に把握することの方が大事らしい.自分は機械学習の専門家でも専攻する学生でもなく,不用意な知識をばら撒いてもいけないので,話はこれくらいにしておく.

興味を持った方は以下の文献を参照して頂きたい(講義で紹介されていたもの)
悪意を持った攻撃からウェブサイトを守るセキュリティ新技術
CiNii 論文 -  SVMを用いたWAFの検知機能の提案

1日目3,4講義目「情報セキュリティ技術者のための法律講座」
企業のWebサイトの情報流出問題について,模擬裁判を行った.私自身,法律に関する知識は本当に未熟で,上手く文章に書き起こせないので,この講義の内容を詳しく知りたい方は他の参加者のブログ記事を参照して頂きたい.下らない感想を言うと,講師の弁護士の方は会場の参加者や講師とはかなり雰囲気が違った.

2日目1,2講義目「Webプログラミング基礎講座」
この講義は午前の部と午後の部に分かれていた.

午前の講義
午前はローカル環境に存在する掲示板サイトから脆弱性を探す演習を行った.このWebサイト,実は意図的に大量の脆弱性が存在しており,Webセキュリティに詳しくない私でも簡単に脆弱性を発見することができた.私の発見した脆弱性は掲示板の検索フォームに存在したSQLインジェクションであり,union selectを使って,掲示板のユーザID/パスワードを表示させた.やはり,FiddlerやBurp Suiteが使えると調査が圧倒的に捗る.

午後の講義
午後はOWASP BWA*2を使った演習を行った.この演習では「検査の自動化」をテーマにしており,簡易診断スクリプトの作成を行った.このスクリプトはBeautiful Soup*3を使用しており,事前課題ではこのライブラリを使用して(必ずしも使用しなくても良いが),Webページのタイトルを表示するプログラムを作成した.以下にソースコードを示す.

gist.github.com 見てお分かりの通り,結構簡単にページの取得とHTMLの解析ができる.講義では,このライブラリを使用して自動ログインを行うプログラム(CSRFTokenありの場合 となしの場合)を書いた.Webセキュリティに詳しくない私が言うのも何だが,このOWASP BWAはかなり面白く勉強になるので,ぜひダウンロードして遊んでみて頂きたい.

2日目3講義目「いじって壊して遊んでハッカーになろう」
RaspberryPiを使った赤外線観測と操作を行った.流れとしては,赤外線リモコンを押して何らかの操作をした際に,RasPiのGPIOと接続している赤外線リモコン受信モジュール*4によって信号を観測するというものである.私の環境では残念ながら観測はできなかった.もしかすると,リモコン信号の学習の際に会場の他の信号が干渉したのかもしれない.モジュールとRasPiのイメージは貰ってきたので,自宅でもう一度再現しようと思っている.講師の先生曰く,この講義は本来であれば8時間近く掛けるべきものであるらしい.実際,今回の講義は2時間だったので8時間版も受けてみたい.

3日目1,2講義目「ハニーポットマルウェア解析講座」
午前はハニーポッド,午後はマルウェア解析に関する講義だった.

ハニーポットの講義
まず午前は実際に攻撃が観測されたマシン(ハニーポッド)にログインし,ログを通じて,攻撃者による実行したコマンドや変更箇所の確認を行った.調査の結果,今回の攻撃者はかなり意識が甘く,/home/攻撃者ユーザ名/.bash_history を削除していなかった.ここから,/var/tmp辺り(記憶が曖昧で申し訳ない)にRootKitを展開させ,実行させていることがわかった.大体の攻撃者は普通に一通りのログや侵入痕跡は削除するはずなので,今回のようにスムーズには解析できないと思うが,侵入解析の初歩を学ぶことができ,かなり良い経験になった.

マルウェアの講義
Windows7VM*5上で検体*6を動作させ,Process MonitorとProcess Exploerを使って検体の動作を観察した.ちなみにセキュリティキャンプ全国大会2016では,"動かしたら負け"の静的解析を行ったが,今回の講義はそれとは対照的に動的解析を行った.また,hybird-analysis・virus-total・malwrといったWebサイトを利用したオンラインスキャンも行い,グループで検体の特徴について話し合った.

ハニーポッド/マルウエア解析(というかディジタルフォレンジック全般)に言えることだが,解析の前にデータのバックアップを取ることやVMのスナップショットを作成することは必須といえる.
面白い講義であった分,自分の知識のなさを実感させられたので現在勉強中だが,以下の本が大変勉強になっており,とても面白い.
実践サイバーセキュリティモニタリング|コロナ社

その他
福岡には前泊で行ったが,もっと早くこれを見ておけばよかった.
明日から某キャン 九州なので博多駅の周りに住む僕がよく行くオススメの食事どころを紹介しておく - じゃあ、おうちで学べる

さいごに
今回のセキュリティ・キャンプ福岡大会開催にあたって,企画して下さった方,当日運営を進めて下さった方,講師・チュータ等,全ての方々に感謝申し上げます.本当にありがとうございました.

セキュリティ・キャンプ全国大会2016に参加してきた

8月9日~13日にかけてクロスウェーブ幕張で行われたセキュリティ・キャンプ全国大会に参加してきました.昨年,地方版のセキュリティ・キャンプであるミニキャンプ in 新潟に参加したので,セキュキャン関連のイベントへの参加は今回で2回目となります.

参加理由
現在所属している大学や,昨年度まで所属していた高校は技術的に優秀な人は多いものの,情報セキュリティについて話し合える人が案外少なかったので,そういった人に会い,関係を広げていきたいという思いが参加理由です.とはいえ,昨年の全国大会に落選したことからの執着心も大きいです.

応募用紙
文章の量で熱意を見せようとしました.この考えが既に醜いですね.三万字くらい書いた気がします(ソースコード除く).とにかく書けば良いという問題ではありませんが,来年以降参加希望の方へのアドバイスとして,とりあえず思ったことや調べたことはどんなに簡単なことでも書いていくべきだと思います.

事前課題
私の選択した講義はほとんど事前課題というものはなかったので,特に準備はしていませんでした.やったことといえば,私の持っているハリネズミ本が第一版だったので買い直し(&読み直し)たことくらいです.(とはいえ,選択した講義はCTFに直結するような形のものではなかったのであまり関係なかった気がしますが)

講義
■1-D Dissecting Malware - x86 Windows malware analysis -
マルウェアの検体をIDA(Free)を用いて静的解析する講義でした.解析した検体の形式は実行ファイルではなくIDAデータベースファイル(.idb)でしたが,ELINKSやNyMain等,実際の事件で使用されているものでした.正直,この講義を通じて静的解析はつらいものしか感じられなかったので私には向いていないのかもしれません.しかし,実際の解析では今回のように静的解析縛りではない(表層解析や動的解析もある)ことや,マルウェア解析におけるいくつかの重要なポイントを教わったので決して無意味な講義ではありませんでした.

■2-C 人工知能とセキュリティ
近年は爆発的な人工知能ブームといえますが,セキュリティ分野ではどのように応用できるかに焦点が当てられた講義でした.講義の中では,既存のSQLインジェクション検知システムのルールを観察,破る仕組みを考えたり,Rを用いた簡単なニューラルネットの実装,TensorFlowを用いて実装された文字認識プログラムの実行と考察などを行いました.また,人工知能にはどういった脅威があるかといった倫理的な話題の討論も行いました.

■3・4・5F OS/VMレイヤで実現する圧倒的に高速なパケットフィルタ/サンドボックス
Intel DPDKというユーザランドドライバを用いて特定のDNS要求をブロックする透過型ブリッジの作成を行いました.DNSというプロトコルは大体UDPパケットなので手間がかかりませんが,もう一つの課題として出されていた特定のhttpリクエストをブロックするブリッジはTCPプロトコルをブロックかつ切断パケットを送信する必要があるので実装が大変そうでした(自分はDNSの方に時間がかかりできなかった).この講義は本当に面白かったので,そのうち別の記事にまとめられればと思っています.しゅうう先生,slankさん,おりさのさん,色々助けていただきありがとうございました.

■6-B AVRマイコンで作るBadUSB自作
USBメモリをキーボードとして認識させるBadUSBをAVRマイコンを用いて実現させ,実際にPCに対して操作を行うプログラムを作成しました.私は昔のブラクラサイトに誘導するものや無限にロック(Windows+L)をかけるもの等,くだらないものばかり作っていましたが,参加者の中にはリバースシェルを張るプログラムやプロキシを書き換えるプログラムを作成されていた方もいたので,BadUSBは攻撃者次第で本当に恐ろしいツールになるという感想を持ちました.

■7-C 遠隔操作マルウェアと標的型攻撃からの防衛
ShinoBot(ShinoBot Suite)を用いた遠隔操作マルウェアの体験,またVBScriptでRATの開発を行いました.RATの開発はグループで分担して行いましたが,RAT自体は案外簡単に実装できるという感想を持ちました.しかし実際にはシグネチャ検知回避等を行う必要があり,攻撃側と防御側は常にイタチごっこの現状だそうです.ShinoBotの技術は昨年のAVTokyo以来,興味を持っていたので本当に楽しい講義でした.あと,同じグループにプロがいたので凄く頼もしかったです.

その他
グループワークやCTF等いろいろ書きたいことはありますが,割愛します(気が向いたら追記します).全体での反省としてもっと様々な参加者・チュータ・講師の方に積極的に話しに行くべきだったと思っています.来月参加するミニキャンプ in 九州(博多)ではこの反省を生かしていきたいです.また,今回のセキュキャンを通じて沢山のもの(物理的なものや精神的なもの)を頂きました.もらったもののうち,書籍は特に高額なので宣伝しておきます.現在2冊とも読み進めていますが,とても面白いです.
Webセキュリティ担当者のための脆弱性診断スタートガイド 上野宣が教える情報漏えいを防ぐ技術
Bugハンター日記

さいごに
セキュリティにあまり詳しくない方でも興味さえあればセキュリティ・キャンプ全国大会に参加できる可能性は十分にありますので,来年以降の応募をお勧めします.また,敷居が高いと感じる方は地方大会(ミニキャンプ)に参加してみてはいかがでしょうか.本当に最後になりますが,今年のセキュリティ・キャンプ全国大会に携わって下さった全ての方々に感謝申し上げます.本当にありがとうございました.