地方向けに最新のセキュリティ動向や技術を伝える「セキュリティ・キャンプ地方大会」。本稿では2016年9月23日から25日にかけて広島県で開催された「セキュリティ・ミニキャンプ in 中国 2016」の中から、専門講座の模様をレポートする。
2016年9月23日から25日にかけて広島市で開催された「セキュリティ・ミニキャンプ in 中国 2016」。このうち9月24日と25日の2日間にわたり開講された「専門講座」では、キャンプ全国大会のカリキュラムの中から「旬」なテーマが扱われた。
セキュリティ・キャンプ講師WG主査の上野宣氏は、前日の「一般講座」の中で、「2016年のセキュリティ・キャンプ全国大会では、いろんなジャンルのセキュリティを取り上げた。ソフトウェアだけでなくハードウェアやオンラインゲーム、マルウェア解析やCTFといった内容を用意し、学生が自由に選択できるトラック制にしている」と、狭義のセキュリティにとらわれず、幅広い分野が対象になっていると説明した。
セキュリティ・ミニキャンプ in 中国 2016の内容も「車のセキュリティ」や「暗号」「ソフトウェア解析」とバリエーションに富んでいる。しかも「ミニキャンプは決して縮小版ではなく、特定の分野に特化したものだ」(上野氏)。限られた時間ながら、25歳以下の学生25人が参加し、課題に取り組んだ。その模様をお伝えしよう。
少し前のニュースだが、「ジープがリモートから乗っ取られ、エアコンやワイパー、ブレーキなどが操作できる脆弱(ぜいじゃく)性が発覚し、140万台ものリコールにつながった」という事件をご存じの方も多いだろう。その後もさまざまなセキュリティ会議では、車の脆弱性がホットな話題となっている。
専門講座の1コマ目「車載LAN上を流れるメッセージの解析」は、まさにそうした車のセキュリティをテーマとした内容だ。広島市立大学大学院 情報科学研究科 情報工学専攻 准教授の井上博之氏が、「つながる車」にどのような課題があるかを説明し、市販の機器を組み合わせた実験装置を用いて車載LANのデータを読み取る実習を行った。学生らの自己紹介では、「自宅の車の情報も見られたらいいな」という声や「既に組み込み系の企業に就職が決まっており、その中でセキュリティも重要だと考えている。この機会を生かして学びたい」という意気込みもあった。
さて、現代の車は機械式ではなく、ネットワークでつながったさまざまなECU(電子制御ユニット)が互いにやりとりすることで制御される。形やプロトコルこそ違えど、ほぼコンピュータのようなものだ。そしてそれを仲介するネットワークが「CANバス」だ。
井上氏は「ECUはこの1本のバスにつながっている。共有バスなので、誰かが送ったデータは全員が受け取り、見ることができるし、大量にデータを送ると障害が起こってしまう。送られるデータフォーマットは8バイトで、ソースアドレスもないので、正規のデータでも誰が送ったものか分からないし、認証もない。つまりプロトコル上、盗聴やなりすまし、DoSに弱い」と説明した。
実はこのCANバスの内容は、市販のツールを用いても読み取ることができる。講義では井上氏が用意したシミュレーターから、25人の参加者全員がつながる形でCANバスケーブルを伸ばし、おのおの鰐口クリップでPCとツール、CANバスを接続。CANバスを流れるメッセージを読み取ってみるという実習が行われた。
端末の違いや仮想環境の問題などで、うまく接続できないトラブルに見舞われた参加者もいたが、一方で用意されたPythonプログラムを用いて流れてくるCANメッセージをどんどん読み込み、さらにプログラムに手を加えてプロトコルの構成やそこで使われるATコマンドの内容を理解する学生もいた。
また、普段あまり触れる機会のないハードウェアを触るのが新鮮だという声も上がっていた。井上氏は「電気的信号から、上のレイヤーのアプリの動きを推察することもできる。ハードウェアについても知っておくと、セキュリティの解析などの知識も広がる」と述べる。
最後に井上氏は「仕様書を読めば、それほど難しくないプログラムと数千円の機器で、自力でATコマンドやCANメッセージを作ったり、ダンプして受信したりできることが分かったと思う」と述べ、その気になれば車載LAN上の情報を解析し、守るシステムを考えることは誰にでもできるとした。
専門講義の2日目は一転して、ソフトウェアを中心とした内容で構成された。
OpenSSLに存在する「Heartbleed」の脆弱性に関するニュースを聞いたことのある人は多いだろう。しかし、実際に何がどのように問題となっていたのか、コードを見て確かめた人となると、ぐっと減るのではないだろうか。アキュトラス/香川大学の中矢誠氏は「OSSを読もう! - HeartBleed編」と題し、OpenSSLのソースコードを例に、ソフトウェアのどこにどう脆弱性が作り込まれるのかを確認するステップを紹介した。
中矢氏の講義は暗号技術の基礎から始まった。シーザー暗号に始まる古典的な暗号方式から共通鍵暗号、公開鍵暗号への流れを紹介し、ネットワーク通信においてSSLをはじめとする暗号技術が大きな役割を果たしていることを説明。それゆえに、「本来だったら安心して通信できるはずなのに、秘密の情報が漏れてしまう」というHeartbleedの脆弱性は大きなインパクトを与えたと述べた。
実習ではまず、Heartbleedの脆弱性が存在している演習用サイトに、攻撃コードを用いてアクセスすることで、その危険性を理解することから始まった。そして実際にセッションIDやCookieといった情報が閲覧でき、拡張ツールを用いて書き変えればなりすましアクセスも可能であることを体感した上で、コードのどこにどんな問題があるかを読み込む作業へと移る。
参加者の多くは、C言語のプログラミングを体験したことがあるというが、コードリーディングとなるとまた勝手が違ったようだ。中矢氏は、CVEの番号をキーにしてNVDやJVNで脆弱性情報を確認し、同時に関連するRFCを読み込むことで、プロトコルやパケットの構造が分かってくると説明。同時に、GitHub上のファイルを読み込むことで、どんな関数が呼び出され、どのように実装されているかの目星も付けられることを、実際のソースコードを例に取りながら説明した。さらにGitHubのPull Requestを確認すれば、「いつ、どのコミットで問題が混入したか」も把握できる。
ポイントは、いくつかキーワードを抜き出し、メモを取りながら読み進めていくことだ。地道ではあるが、「OpenSSLのような大きなプロジェクトでも、頑張れば読めるという感触を持った人もいるのではないか。ソースコードの追跡は、他のオープンソースソフトウェアでも、あるいは自分が取り組むプロジェクトでも有効だ。脆弱性は、それを追跡してセキュリティについて勉強するチャンスでもある」(中矢氏)。同氏は最後に、こうした知見はまた、テスト駆動型開発や脆弱性診断の自動化といったこれからの課題の解決にもつながるだろうと述べた。
Copyright © ITmedia, Inc. All Rights Reserved.