「Cyber Grand Challenge (以下、CGC)」は、完全に自立したシステムが競うCapture The Flag (CTF)の大会で、その手の競技会としては世界で初めてのものとして2013年に発表された。競技には世界中のセキュリティ研究者やハッカーからなる100以上のチームで始まるが、決勝戦の参加資格を得られたのはたった7チームだけだった。これらの7チームは、お互いに他のチームを攻撃しながら、自分のチームのソフトウェアをIDSのルールや修正パッチで守る術を競い合った。
すべての工程で、プログラムのソースコードに(人間が)アクセスすることも(システムが)人間に(判断を求めるといった)アクセスをすることもなかった。
世界初のレベルで自立したシステムは、静的解析、バグ探し、攻撃コードの生成、そしてソフトウェアの修正パッチの作成と適用をすべて自動で行うという、コンピュータセキュリティの分野で最先端の技術を実証した。きっかり10時間かけて、これらのシステムは、誰もがこれまでに見てきたものを超えた能力を示しながら、80以上の全く新しく作られた小さなソフトウェアの分析を競い合った。
本講演では、CGCについて、何が必要とされ、結果が何を意味し、そしてこれらの進歩が、近い将来、ソフトウェアのセキュリティにどのような影響を与えるかを説明する。さらに、CGCで勝利したチームから学んだ点を共有し、自動化されたソフトウェア分析の未来を見てみる。
--- タイラー・ナイスワンダーTyler Nighswander
タイラー・ナイスワンダーがコンピュータハッカーになったのは数年前のことだ。彼は、カーネギーメロン大学の学部生の傍ら、Plaid Parliament of Pwning(PPP)として知られるハッキングチームの初期メンバーだった。このチームは小さな学生グループから競技ハッキングの世界一のチームに成長した。
ハッキング競技で競い合うために世界中を回った後、ようやく現在の会社、ForAllSecure社にて落ち着いて仕事ができ、今は、人々そしてコンピュータがハッカーのような思考にどのようにしたらなるのであろうと言うことについて取り組んでいる。
2016年、彼が製作を支援した全自動システムは、DARPA(アメリカ国防高等研究計画局)が主催するCyber Grand Challengeで勝利した。
12. THE CYBER GRAND CHALLENGE
始まり
▸ Defense Advanced Research Projects Agency (DARPA)
▸ Internet、GPS、ステルス技術、オニオンルーティング等の現実化
▸ 様々な”チャレンジ”を主催
CMU Sandstorm Google Self Driving Car
13. THE CYBER GRAND CHALLENGE
始まり
▸ アイディア: コンピュータセキュリティのチャレンジを主催
▸ CTF協議モデルの採用
▸ 入賞上位7チームに賞金USD$750,000
▸ 決勝戦優勝者に賞金USD$2,000,000
▸ Cyber Grand Challenge
29. THE CYBER GRAND CHALLENGE
MAYHEM
▸ System created by ForAllSecure
▸ (spoiler alert: winning system!)
▸ Overall architecture roughly similar to other teams
▸ Several independent components with different tasks
▸ Use centralized database for sharing information
▸ Let’s dive in!
30. THE CYBER GRAND CHALLENGE
MAYHEM: 頑強性
▸ 100%自動化でなければいけない!
▸ システムを稼働し続けるのは困難!
▸ 信頼されないコードの実行は困難!
▸ 不明なプログラムの分析を行うソフトウェアの開発は困難!
▸ 分散システムは難しい!
▸ 以上のことを全て敵対条件下で行う!
32. THE CYBER GRAND CHALLENGE
MAYHEM: バグの発見
▸ シンボリック実行
▸ 学界では最先端のテクノロジー
▸ プログラムをシンボリック表現として表す
▸ SAT/SMT ソルバーを使ってインプットを生成する
33. int main(int argc, char** argv) {
if (argc < 3)
return -1;
int a = atoi(argv[1]);
int b = atoi(argv[2]);
if (a == 42) {
if (b == 31337) {
puts(“You made it!”);
}
return 1;
}
return 0;
}
シンボリック
として扱う!
LEN(ARGV) >= 3
RETURN -1
42 == ATOI(ARGV[1])
31337 == ATOI(ARGV[2])
RETURN 0 RETURN 1
PRINT
34. THE CYBER GRAND CHALLENGE
MAYHEM: バグの発見
▸ ファジング
▸ 業界で標準の技術
▸ 確定値をプログラムに送って実行する
▸ また、プログラムの”計測”も可能
▸ 内部状況の開示、インプットをどう処理したか
▸ 様々な手法を使って行うことが可能…
35. A = 239075, B = 75291
if (a == 42) {
if (b == 31337) {
puts(“You made it!”);
}
return 1;
}
return 0;
42 == A
31337 == B
PRINT
0.00000002%
0.00000002%
RETURN 0
99.99999998%
A = 239075, B = 31337A = 42, B = 9852756A = 42, B = 24752A = 42, B = 31337
60. THE CYBER GRAND CHALLENGE
MAYHEM: トリアージ
▸ ”バグのパッチを行う”とは?
▸ プログラムとクラッシュを誘発する入力ではどっちに”責
任”?
▸ アクセス違反:アクセスに使われたレジスター
▸ 実行違反:制御フロー命令の回帰
▸ 命令がクラッシュを誘発しないようにチェックする
▸ これらの処置は根本的な問題解決にはならない…
61. THE CYBER GRAND CHALLENGE
MAYHEM: トリアージ
▸ 根本的な問題の検知に”通常”の入力を使う
▸ プログラムを実行し、クラッシュ直前のプログラムの状況
を調べる
▸ この情報をもとにクラッシュによって影響を受けた不変異
要素を導き出す
▸ パッチするにはこれらの不変異要素に対する明示的なチェッ
クを追加する!
62. THE CYBER GRAND CHALLENGE
MAYHEM: パッチの適用
▸ 全バグの100%を見つけられない場合は?
▸ 包括的なパッチの適用も行える
▸ 通常の保護策はコンパイラで行われる
▸ スタックカナリア
▸ Control Flow Integrity
▸ データ実行保護
▸ 領域外の読み込み・書き込み保護
▸ コンパイラーに取ってもこれらの保護は決して無償というわけではない
▸ コンパイラーと違って、我々の手元にはソースコードがない。
RETURN ADDRESS
SAVED EBP
LOCAL BUFFER
LOCAL ARGS
RETURN ADDRESS
CANARY
SAVED EBP
LOCAL BUFFER
LOCAL ARGS
…
if (a == 5)
foo()
return 0;
}
次は何
だろう?
63. THE CYBER GRAND CHALLENGE
MAYHEM: PATCHING
▸ Use static analysis to recover program information
▸ Take shortcuts!
▸ Perfect CFI requires a lot of program information
▸ “Pretty good” CFI is still very powerful!
▸ Get free registers, etc. as a compiler would have
▸ Generate efficient, lightweight patches
▸ Run thousands of benchmarks to ensure performance!