更新日時で差をつけろスマートフォン用の表示で見る更新日時で差をつけろもはや更新日時でしか差を付けられない2019-06-09セキュリティ・キャンプ全国大会2019の選考に通ったTweetセキュリティ・キャンプ全国大会2019の書類選考に通って集中開発コースのリバースエンジニアリングゼミに参加できることになったので例に倣って応募課題とそれに対する自分の解答を置いておきます。応募は2,3回目で2年前に応募して不合格になっていました。昨年はSecHack365などで夏の予定が埋まっていたので応募しませんでした。今までにリバースエンジニアリング(分解や解析など)した経験を好きなだけ語って下さい。対象はソフトウェアやハードウェアに限定しません。ICカードリーダ秋葉原のジャンク街でSONYのRC-S310を300円で買いました。RC-S310は2001年発売なので私の同期です。公式のホームページに「NFCポートソフトウェア」なるものが転がっていて、現在公開されているRC-S310対応のプロダクトはこれだけでした。Windowsでしか動作しないのでVirtualboxで動かしつつWiresharkでUSBの通信を見てみると、カードをかざしたり外したりするたびにずらずらパケットが流れるのが見えましたが、結局どれがどういう意味を持つパケットなのかわからずに終わってしまいました。FeliCa(NFC)規格とPaSoRi(カードリーダのブランド)のパケットがごっちゃになっているのかなあと予想しました。libpasoriやlibpafeといったライブラリが開発されていましたが、いずれも動作しませんでした。中古のWindows機を手に入れたので、うまいこと解析して部室の鍵開けを使い道のないICOCAなどでできないだろうかと考えています(電通大MMAのKagisysのイメージです)。ACアダプターが断線してしまったのでAmazonから安い非純正品を買いました。Proを載せて使っていました。するとすぐ寝落ちしてしまいました。1時間ほど経って目が覚めました。Macを充電していたケーブルを取り払おうとアダプタに触ると...熱い!いままでとはひと味違う熱さと焦げ臭さを放っています。布団に長時間挟まれて熱がこもっていたようです。Mac用ACアダプタは白い角丸ボディが特徴で、その非純正品もデザインを踏襲していました。目の前にあるアダプタは変形して工業製品というより粘土工作のような形になっています。つなぎ目の部分があらわになっていて、爪を入れて力を加えると中の電気部品が見えます。その後数ヶ月ほどで完全に充電できなくなってしまったので、新しいアダプタ(やはり非純正品)を注文した後に変形したアダプタを分解してみました。ケースのつなぎ目に(物理的な)鍵を差し込み「てこ」のようにしてこじ開けると、白い長方形の基盤にコンデンサやトランスが載っていました。2辺は金属板に挟まれています。見るとケース内部に焦げたような跡もあります。基盤とケースもボンドのようなもので雑に固定されていたので、また鍵を隙間に差し込み外しました。基盤の裏側には厚膜チップ抵抗(調べて名前を知った)が十数個ハンダづけされています。「新HD60P02A」と型番がプリントされています。見るだけでも楽しいですが、せっかくなので部品を取り外すことにしました。はんだごでではんだを熱して、液状になったのを向こうに弾き飛ばすという怪しい方法を使います。学校の実験で先生が「あんまり推奨される方法ではないけど...」と言いながらやっていたのを真似しました。はんだ吸い取り線は持っていません。わからない素子、というように外していきました。小さい部品は大変でしたが一個一個外していくと基盤表面の印刷が見えてきました。金属板があった場所には「HS2」と書いてあったのでたぶん放熱用のヒートシンクではないかと思います。大きなコンデンサやトランスも収穫できました。使いどころはありませんがそのまま取っておいて、いまの充電器が変形したら分解して比較するつもりです。Mid)突然電源がつかなくなってしまいました。Macが動かなくなった際の常套手段であるPRAMやSMCのリセットを試しても変化がありません。調べるとバッテリーを付けて取り外すこと(放電)で直るかもしれないとわかったのでドライバーを借りてきて分解し、無事起動することができました。このMacは古いのでまだネジが公の場に姿を表しています。知り合いの薄いMacBookを見るとネジ穴もポートもないので、なんだかなあと思ってしまいます。この件以来Macの分解をよくするようになりました。情報工学研究部の部長として、コンピュータの基礎的な部分を講義することがあります。そんなときもどこからともなくドライバーを取り出してMacの裏蓋を外し「これがSSDです」と見せると下級生もドン引きして印象に残るようです。これは分解ではありませんが作業中にFキーとNキーのカバーが飛んでいきました。カバーの下のゴムが丸見えになって、メンブレンキーボードの仕組みがよくわかるようになりました。rom最近はあまりプレイできていないのですがCTFが好きです。exploitation・reversingといったジャンルを好んで学んでいます。低レイヤに興味を持ったのも、NICT主催のSecHack365というハッカソンに参加したのも元をたどればCTFがきっかけで、そこではコンパイラ(LLVM)やエミュレータ(QEMU)の改造をしていました。Fridaなども使ったことがあります。ARMアセンブラは勉強中で、まだx86とPICのそれしか読めません。(ところでフィジカルトラックでは「自分の得た知見を他の人と共有するための行動を起こす人」というのが求める応募者像の一つに上がっています。とある工場長の方からTwitterのDMで連絡をいただき「電卓を作りたいんやけど手伝ってくれん?」と連絡があり、いろいろと自分なりに調べていました。既存のものにどういう部品が含まれているか見てみようということで安い電卓を仲間で集まって分解してみました。外から見える部品には7セグのディスプレイ・光電池パネル・ボタン用に穴が開いたフレーム・多数のボタン。ボタンはシリコンで出来たシートの突起と噛み合っていて、ボタンを押すと突起の裏側にある黒い膜がPCB基盤の丸い部分に触れる仕組みになっています。PCB基盤をひっくり返すと「CT060」という型番らしきものが刻印された緑色の面があります。7セグディスプレイがフラットケーブルで接続され、ボタン電池が基盤のホルダーのようなものに入っています。電卓を買ってきて光電池を充電しなくてもすぐ使えるのは基盤に直でボタン電池を取り付けているからだとわかりました。明るい緑色で少し光沢を持った線が多数伸びています。その線は基盤中央から少し上にある黒い円に入っていきます。この中に計算を処理するチップが入っているのではないかと推測しました。黒い円はエポキシ樹脂という熱硬化性をもつ素材です(おそらく)。円形の黒いエポキシ樹脂を溶かして覆われたチップを取り出す方法も見つけました。「熱硬化性の素材は一度固めると特殊な溶剤なしには溶かすことができない」というオンライン辞書の記述は一度無視することにしました。熱湯に基盤ごと入れて熱する方法が紹介されていました。この温度を越えるとやわらかくなるらしい)は75°Cのものから250°Cを超えるものまであるので、水を沸騰させて100°Cにすれば電卓の樹脂も溶けるかもしれません。実際に試したところ、何の変化も得られませんでした。見つけたはんだごてで熱する方法を試してみました。480°Cなので熱湯よりは期待できます。実際に熱したはんだごてを当てて数十秒待つと黒い樹脂の表面がぬるぬると溶けてこて先が滑る感覚がありました。これならいけそうだと思い1時間ほど当てて見ると、1mm四方取り除くことに成功し下の基盤が見えました。円は半径8mmほどで、面積はπ88=201mm四方です。201時間はんだごてを当て続けるのは定年退職後の暇つぶしにとっておきたいので、別の方法をあたることにしました。高熱に当てればよいことがわかったので、部屋にあったオーブントースターで基盤を熱してみました(これもどこかのサイトに書いてあったことですが、リンクをなくしました)。放置しておくと「ポン!」と破裂音。基盤を取り出すと小さくて気づかなかったLEDが赤く光っています。ボタン電池を取り外さずに熱して、回路がショートしてしまったようです。電卓の筐体の外から見えない場所になぜこのLEDが存在するのかはわかりません。基盤は熱でプリントが膨らみところどころ気泡ができていました。PCB基盤の層構造を体感しました。見つけたアプローチの中でまだ試せていないのがヒートガンで熱する方法です。これ以外に使用する場面がなさそうで購入をためらっています。関数電卓エポック樹脂が剥がせなかったので、他の電卓を探して分解することにしました。古い関数電卓なんかは樹脂で覆われていない場合もあるそうなので、メルカリの500円クーポンを使って490円の中古関数電卓を買いました。複素数の計算すらできないCASIOのfx-290です。届いてからさっそく分解してみると...そこには黒い光沢のエポック樹脂がありました。蓋をそっと閉じて、いまは机の引き出しの奥に眠っています。BLEな電球どこかの勉強会のスライドを見て触発され、IoTなハッキングがしたくなったのでAmazonで安いBluetooth対応の電球を買いました(「Matchdor」というブランドで今は見つからず)。スマホと機器間のBluetooth通信を取ってくる方法としてAndroid端末でHCIスヌープログという機能がよく紹介されています。iPhoneしか持っていなかったのでApple公式のデバッグ用プロファイルを導入するなどしてなんとかログを取ってきて読んでみましたが、これもGATTなどプロトコル周辺の関係がよくわからないまま放置されています。家の古いルーター802.11nにすら対応していない家のBUFFALO製無線LANルータ(型番はWHR-AMG54)につながりづらくなってきたので新しいルータを卒業式の帰りに買ってきました。古いルータは特に使い道がなかったのでバラしてみました。どことなく年季が入っていてホコリだらけです。中に緑色のPCB基盤が入っていて、BroadcomとEtronTechという会社のチップが見えます。REV:XC」という表示を見つけました。製品の型番と似ても似つかない名前なので検索してみると中国語のフォーラムが出てきました。JTAGのポートが装備されているようです。Pirate・Shikraといったハック用のツールや、汎用的に使えるオシロスコープ・ロジアナもどれがよいのかわからなくて定期的にAliexpressを覗いては足踏みしています)。あなたが今一番リバースエンジニアリング(分解して仕組みが知りたい)したいものを紹介して下さい。Stickを購入・接続しました。Stickは無線LAN経由でインターネットに接続して動画をダウンロードし、それをHDMI経由でテレビの画面に流すものです。あの小さい筐体の中に何が入っているのか気になります。(CDM)なるものをインストールされました。DRMのために使用されているようです。videoで利用されているのはWideVineという種類で、他にもPlayReadyというのが人気のCDMです。Stickにもそういった復号モジュールが入っているのではないかと予想して、楽しそうだなと思いました。Alexaに対応した音声認識機能がついています。Alexaとスマートスピーカー(Echo)を使った開発をして知識が少しあるので、それとの違いにも気付けるかもしれません。よると、プロセッサはARMアーキテクチャのものを採用しているようです。詳しい型番は書かれていません。以下の技術用語について解説してください。どのようなところで使われているかも述べてください。Transmitterという原語が示す通り、マイコン等と非同期通信をするための規格。データ転送速度はボーレートで示され、9600baudがよく用いられる。一つのパケットに入るペイロードの長さは5〜9bitであり、その前後には送信の開始・終了を知らせるための特定のビットを付け加えるためデータ量は大きくなる。誤り修正のためのパリティビットが付けられる場合もある。端子は信号送出側のTXと受信側のRXのみであり、互いのTX端子を互いのRX端子に接続するので送信と受信は同時に行える。RX端子をまた別途用意する必要がある。マイコンではUARTやその同期通信バージョンであるUSARTが利用でき、センサ等と通信できるようになっている。外部からのデバッグや検査のために機器と通信できるように基盤にUARTポートを設ける場合も多く見られる。いった機器の例としては家電製品やIPカメラが挙げられる。Groupの略で、基盤の検査・デバッグに用いられる端子・検査方法(バウンダリスキャンテスト)の規格。半導体技術の進歩で基盤上の素子の密度が上がり、プローブを手で差して測定器(オシロスコープとか)を見て検査するやり方が難しくなったために作られた仕組み。バウンダリスキャンテストに用いられていた。バウンダリスキャンテストは基板上でICとICをつなぐ導線がショートしたりちぎれたりしていないか確かめるためのテストで、検査用のビット列を入力して、それに対応する出力を見ることで検査する。JTAGが普及する以前は導線を一部太くしてテスト用のランドを設けプローブで検査できるようにしていた(イン・サーキット検査)。代わりにJTAGではIC内部(入力・出力ピンと処理部分の間)にテスト用のセルを設けることで、ICの外の基盤の構成をよりシンプルにできるようになっている。単なるランドではなく回路としてのセル(プローブとランドを合わせたようなもの)を挿入することで、導線を横切るようにセル同士をつなげられる。それぞれのICでつなげたセルたちを(TAPコントローラのTDI/TDO端子を介して)デイジーチェーン接続することで機器全体の検査が少ない端子で行えるようになった。Register)に流し込むことで動作を切り替える。バウンダリスキャンレジスタなどいくつか種類があり、IRの値に応じてどのDRを操作するか決定する。IRに格納される命令は規格で定められているものもあれば、メーカが独自に拡張するものもある。BYPASS命令はTDIから入力されたビットをBYPASSレジスタに入れてそのままTDOから出力する命令。1ビットのBYPASSレジスタに一度貯めることで1クロック出力を遅らせる効果があり、機器全体ではTAPコントローラの数だけクロックが遅れる。その遅れを観測することで機器内のTAPコントローラの数が合っているか確かめることができる。SAMPLE命令とPRELOAD命令はバウンダリスキャンレジスタを通じてデバイスの入出力を取得し、同時にバウンダリスキャンレジスタにテストパターンを書き込むことができる。厳密にはこの2つは異なる命令だが、同じSAMPLE/PRELOAD命令として動作させることが推奨されている。EXTEST命令はバウンダリスキャンレジスタの値をそれぞれのピンから出力する命令。Update-DRステートに移行することで入力を取りだせ、テストパターンを比較することでバウンダリスキャンの結果を知ることができる。CLAMP命令などがある。Register)にTDIから命令(メッセージ)を流し込むことができる。Register)にデータを流し込むことができる。Capture-DRステートでは回路の情報を取得してDRに格納する。逆にUpdate-DRステートではDRの値を回路の別の場所に格納する。具体的にどのような情報を取得するかは命令に依存する。Update-IRステートではIRに格納された命令を実行する。Capture-IRステートでは「ステータス」と呼ばれる値をIRに格納する。JTAGでは先述したようにメーカ・モデルによってさまざまな拡張がなされている。拡張の一部を知るためにはメーカが提供するBSDLファイルを用いることができる。他にもARM製プロセッサに搭載されているCoresightというデバッグシステムや、JTAGの4本の導線を2本に減らして派生したSWDという規格があるようだが、JTAGとの関連はよくわからなかった。Emulator)と呼ばれるデバッグ用の装置もあるが、単純にJTAGポートに接続してデバッグを行うこととの違いは不明である。製品検査のために策定されたということもありUART同様さまざまな機器の基盤にデバッグ用のポートが設けられている。逆に、機器内で完結する通信(センサ-マイコン間など)については他のプロトコルがより用いられていると思われる。個人的には最も身近な例として先述した実家のルーターが挙げられる。この基盤のBSDLファイルは入手できなかった。Interfaceの略で、機器に入っているICが他のICと通信するためのプロトコル。数Mbps程度で比較的高速に通信できる。Select)がある。Clock)があることからわかる通り、SPIはクロックで同期を取って通信する点が非同期通信のUARTと異なる。SPIでは接続されたICは1つのMasterと複数のSlaveに分けられる(Masterは多くの場合マイコン)。MISOはSlaveからMaster、MOSIはMasterからSlaveへの通信に利用する。SSは複数のSlaveのうちどれと通信するか選択するために用いるもので、通信したいSlaveとのSS出力だけを0にセットする(通信しない状態では常に1)。これらのためにUARTやI2Cよりも必要な接続線が多くなっている。JTAGではTDIとTDOにデイジーチェーン接続を用いていたが、SPIのMasterとSlaveの接続はスター型をとることもできる。MISOをスター型に接続する。MOSIのMaster側は必ずしもMasterそのものである必要はなく、Masterからの信号が間接的に渡されてくればよい)。この場合は1クロックずつずれてデータがSlave間で転送される。デイジーチェーン接続に対応していないデバイスも存在する。Phase)を指定することで、アイドル時のクロック信号を1と0のどちらに固定するかやクロックの立ち上がり・立ち下がり時の処理を指定することができる。SPI)という仕様も存在する。Alertという端子を追加して、SlaveからMasterにイベントを通知できるようになっている。どちらかといえばセンサとマイコン・マイコンとアクチュエータ間といった機器内の通信用に主に用いられている。SPI同様機器内の通信に用いられる。UARTと違って同期通信ではあるが、先頭と末尾に一定のパターンを加えてからメッセージ単位で送信する。端子にはデータを送受信するためののSDAとクロックを供給するためのSCLがある。UARTでは1対1の通信しか行えなかったが、I2Cではメッセージに宛先アドレスを含めることで多対多のネットワークを構築できるようになっている。SPIと同じくMaster・Slaveという区別を採用していて、通信はMasterから始める。Masterも複数接続できる。メッセージのRead/Writeビットを切り替えることで、MasterからデータをSlaveに投げるのか、それともSlaveからデータを送るよう要求するのか区別している。メッセージには任意個のデータフレームを含めることができる。それぞれのデータフレームの長さは8ビットで固定である。データフレームを送信する前後で受け取り側は送信側にACK/NACKビットを返答する。ACK(Acknowledge)はTCPのそれと同じ意味で、データを正しく受け取った場合はACKとして1を、そうでない場合はNACKとして0を返す。こちらは機器の基盤にポートが設けられている例は見つけられなかったが、温度センサなどでSPIを介して通信できるようになっているものは多数見受けられた。それができると攻撃者はどのような攻撃ができますか?事例などもご存知であれば合わせて紹介してください。実はこの設問の意味が理解できていなくて(「それができると」のあたり)、全くトンチンカンなことを書いているかもしれませんが容赦ください。安全なファームウェアアップデートを行うためには、ネットワークを経由してダウンロードしたファームウェアがベンダ正規のものであり、改ざんされていないか確認するため、アップデート時に署名を確認させるのが有効です。Module)やARMでいえばTrustZoneのような仕組みを活用して隔離した場所で管理すべきです。そのような鍵にはたとえばベンダの公開鍵そのものの正当性を確認するためのルート認証局の公開鍵や、共通鍵暗号を利用する場合はその共通鍵が考えられます。Samsungのテレビなどがそうだったように思いますが、リンクを失くしました)。これらの対策ができる場合でも、攻撃者はアップデートに関係しない部分からファームウェアを改ざんするなどして攻撃を加えることができます。基盤のデバッグポートを利用したりチップを取り外したりして、もしくはファームウェアそのものの脆弱性を突いて(スマートテレビのOSコマンドインジェクションがわかりやすい例)ファームウェアをダンプし、解析・改造して書き込み直すといった方法があります。何か他にアピールしたいことがあれば、自由に書いてください。誤ったことを書いていても減点はしません。書いておきたいことはなんでも書いてください。問1で述べたとおり、何かを分解するのはそれだけでも楽しいのですが、毎回その仕組みがよくわからないまま終わるので何か一つでもしっかり解析してみて流れ・コツを掴みたい、またseccampでしか学べない最新の技術に触れたいと思い応募しました。昨年度の全国高専プログラミングコンテスト(高専プロコン)の課題部門に出場しました。Alexa)を使いつなげるシステムを構築して出展しました。家電の操作を宿泊者の母国語でできるようにしたり、近所の有名なスポットを教えてあげたりということができます。当日はブースを構えてデモを行う必要があったので、何らかの家電を見に来た人に声でライトの電源を操作してもらうことにしました。そのためにはコンセントからの電源入力を遮断・導通できるいわゆる「スマートプラグ」が必要になります。Amazonで普通に買っても良かったのですが、せっかくなのでいろいろと調べて自作しました。Pi制御のリレーを差し込むという単純なものです。やって切ったり付けたりして何かを作るのはずっと好きですし、学校でもなぜか電気のことを学んでいるので(コンデンサ・共振・三相交流etc...)何かハードウェアにも活かせないだろうかと考えています。