いろんな技術に触れたいいろんな技術にふれたいスマートフォン用の表示で見るいろんな技術に触れたい日頃色々触れた技術を自分なりにまとめておきたいと思ってます。分かる人には分かるレベルで書こうと思います。書いていたらまた来年も出たくなってきました。BLUEに参加してきました。HackのCTFに出てみないかとお声掛けいただいたので、折角の機会なのでチャレンジした次第です。SecHack365の人や、その他の知り合いの人がたくさんいて楽しい限りでした。BLUEでは複数のCTFが同時に開催されています。hackingというCTFです。みなさんは実際のCANバスをハッキングしたことがありますか?CANバスのハッキングとは、どんなものだと思いますか?難しい?高価なデバイスが必要?答えを知るために、ぜひ私達のCTFに参加し、あなた自身の手で私達のラジコンカーをハッキングしてみて下さい!え、CANなのにCTF?私も初めての参加なのでそう思いました。株式会社さんと協力して挑みました。www.trillium.co.jpもうひとり、筑波大学の友人と合わせて2チーム結成しました。Trilliumさん」です。ちなみに、Trilliumさんの社員さんは外国の方が多くおられるので、皆さん英語でコミュニケーションをとります。私英語そんなとくいではないです。参加したことないので、何が必要か、どんな環境かわからずに参加しました。CTF環境こんな感じでした。PiにPiCANシールドを載せ、そのRaspPiが実際のラジコンカーのような動作を実現しているようです。このPiCANボードは私もよく触っていたので懐かしかったですね。わかりやすく図にするとこんな感じです。CANレベルでしかアクセスできません!※解析用ラズパイにはSSHできます。CTF環境のイメージ解析対象もラズパイなのですが、挙動から察するに何かと通信しているみたいでした。解析対象はCAN以外でアクセスすることが(当たり前ですが)禁止されていました。解析に使用した機器についても簡単にまとめておきます。アナライズに最適なツールです。CANoeよりアナライズに適しているのは間違いないです。得意なのはリアルタイム解析です。スクリプトは書けますが不便です。あと一つのメッセージ送るのも面倒です。MicroPeckerログ分析に最適です。ログエディターが超優秀なのです。今回はあまりその機能は使いませんでしたが。スクリプトは作れません。簡単なトリガのみなら設定可能です。CANtact持っていきましたが使えませんでした。(ケーブルが足りず)MacでPythonスクリプトが使えますし、VMのLinuxで通常のCAN-utilsを走らせることができます。次のラズパイにSSHすれば良いのですが、SSH環境がないときのためでもありました。Pi解析対象のラズパイに接続されていた参加者共通の解析機器です。基本的にこのラズパイを利用して解析を進めていく形になります。標準的なCAN-utilsが使用可能でした。個人的に本当はCANoeを使いたかったのですが、てにはいりませんでした!wえ、きゃんぬーしらない?jp.vector.comとても高いらしいですよ。私も某自動車会社でしか触ったことないです。手に入る方は是非使ってみてね。CANoeが得意なのは(CAPLと呼ばれる)スクリプトです。IDが使用されていました。通常よりも長い宛先アドレスIDを持つものです。IDの2倍、乃ち4byteが利用可能です。IDの定義は以下でした。IDには送信元は存在しないはずなのですが、このような使い方も十分想定できますね。データ部については以下のように定義されていました。0123に向けて、コマンド01を送信すると言った感じです。01コマンドは確かSHUTDOWNでした。ちなみにこんな感じでやってました。01240101のように0101でメッセージを送信し、返信のみを取り出すと以下のようにFlagが降ってきます。以降、Flagが降ってくるというときはこんな感じだと思ってください。ハートビートを書けでした。解析用ラズパイでcandumpコマンドをASCII表示つきで見ればわかりやすいかと思います。現在流れているメッセージを何らかのアナライザでモニタすると、以下のようなメッセージを見つけることが出来ました。1234はMUGIDESUをブロードキャストしていることがわかります。定期的にブロードキャストしているのでハートビートですね。2MUGIDESUさんにHiMugiと送ります。割りとつまりましたが、一度対象のECUを再起動するとうまくいきましたあるIDに対して、以下のようなメッセージを送信する。flag!MUGIDESUといっているIDに対してHiMugiと送りたいので、以下をcansendすればOKです。01011234#48694d756769これでFlagが降ってきます。3コマンドを理解した上で、MUGIDESUをシャットダウンします。01011234#0101これでFlagが降ってきます。CTF-1各ECUの情報を取り出せるか、というものでした。EngineとSteeringのECUに対して情報取得コマンドを投げると、分割されたFlagっぽいものが返ってきます。0121と0124に対して情報取得を意味する03を投げます。※0101を自身のIDだとします01010121#010301010124#0103Flagが降ってくるのでデータの読む所に注意してくっつけます。CTF-2これはなんか全然覚えていません。ブロードキャストをなりすませ!というものでした。0000を上手くつかってEngineの値を増やすことが出来たらFlagが降ってきました。一度成功するとFlagが降ってくるので、それを見落とさないようにしましょう。CTF-3ここから2日目に突入するので一度問題を持ち帰りました。CTF-3はユーロビートでした。わからなかったですが、他の問題をやっていくうちにわかりました。車内に音楽再生のユーロビートがあるので、乗っ取っていじってやろう、というものでした。結局解かなかったですが。CTF-4これ、2日目に一番つまりました。EngineのECUとのセキュアなセッションを開く際のやり取りをSniffしたので、これを基にセキュアセッションを確立せよ、というものです。Accessと呼んでいます。1日目の夜に色々調べたりしたのですが、他のチームが解く速度を察するにそこまで難しいものではないはずです。ヒントを使ったのですが、使う意味があまりありませんでした。何も出来ない午前を過ごし、MiroPeckerで大量にロギングし、ログ分析をしていて気づきました。同じシード値が使いまわされていたのです。シード値は問い合わせる度に変更されるので、そこに注意しつつSniffしたものと同じシード値が返ってきたらSniffしたものと同じ鍵を送信する、それだけでした。このためのPythonスクリプトを後輩に書いてもらって、どうにかなりました。SecurityAccessを取得し、この状態じゃないと実行できないコマンドを送ればFlagが降ってきます。Accessのやりとりを示すので、どうですか?みたいなやつですそう、例なので、CTF-4と同じやり方ではありません。Forceではなさそうでした。例を見ると、どうやらシードを右にあるビットだけシフトさせると鍵になっていることが分かりました。これをもとに、シード値を問い合わせる➔鍵を送信するこれでSuccessし、CTF-4と同じようにこの状態のみ有効なコマンドでFlagが降ってきます。ちなみに残り7分のところでFlagが降ってきました笑CTF-6これがあとちょっとだったはずなのに、解けませんでした。問題はFirmwareをdumpせよ、というものです。ADDRESSしたアドレスを何かするんだと思います。これをTrilliumさんが挑んでくれていたのですが、どうにもなりませんでした。CTF-7~これ以降解くことが出来たチームはいなかったと思います。覚えていませんが、、これ以降はFirmwareをDumpすることが必須となっているので、まったくわかりません。私はTrillium側なので残念ながら5位でした。一位はイエラエセキュリティさんです。