セキュリティ・キャンプ参加記/課題晒し

投稿者: | 8月 31, 2023

目次

はじめに

参加記や応募課題晒しをやるのが慣習らしいので今更(セキュキャンは8/7~11この記事を書いているのは8/31)書きます。感想文を書くのがめちゃめちゃ苦手なのであまり書きたくはないのですが…小学生並みの感想しか書けないので小学生が書いていると思って読んでください。

謝辞

非常に素晴らしいイベントの企画・運営をありがとうございました。また、このセキュリティ・キャンプの存在を教えてくれた友達の8bitマイコン(@771_8bit)氏ありがとうございます。

自分が参加したクラスついて

自分が参加したのはX1のリバースエンジニアリングゼミです。内容としては、好きなIoT機器を分解して脆弱性を探したり、解析したりするものです。ええ、そうです、いつも私がやっていることと同じです。今回私がこのゼミで解析したものはURoad-Home2+であり、その成果をまとめたのが、
URoad-Home2+を分解してみた5~ファームウェアを改造~
URoad-Home2+を分解してみた6~MTE-N100を解析・ファーム改造~
URoad-Home2+を分解してみた7~OpenWRTの作成~
あたりになります(半分くらいは後日家で行いましたが…)。リバースエンジニアリングのノウハウを得ることができて、今後の機器の改造が捗りそうです。
クラス自体は非常に楽しく、自分が好きなようにできて機器も貸してくれ、わからないことがあれば講師の方に聞くことができるという、理想の環境といった感じでした。最終日はチューターのじぶりんさんと二人三脚でわいわい開発ができて明日も明後日もセキュキャンが続けばいいのになーって非常に名残惜しかったです。X1自体は受講生が2人でもう一人は大学4年生の年上の方でした。私とは技術力が段違いであり、私が1日かける事を数時間で終わらせててたまげました。また他のX開発クラスと同じ部屋でしたので他のクラスにちょっと顔を出して様子を見たり、一緒にラジオ体操したり、他の講師の方に質問をしたり…と良かったです。特にX3の講師の方が私の事をいろいろ他の人に紹介してくださったり、X3に来てほしかったといってくださったり、非常に光栄でした。いままでブログ書いててよかったなと思いました。

その他のイベント

クラスだけではなく、IPAへの社会科見学や、LT会、グループワークなどがありました。社会科見学は面白かったですがここでは書けません。LT会とグループワークでは発表資料の作成ツールから、発表方法、発表内容と非常に多くの事を学ぶことができました。グループワーク自体では自分が使ったことのない単語が飛び交い、その度にコソコソっとGoogleで検索かけてました。

参加者と話してて感じたこと

自分はこのセキュリティ・キャンプが初のテック系イベントへの参加だったので、覚悟していましたが、皆技術力だけでなく、行動力と向上心があるなと思いました。無職・サークル/部活未所属で趣味でゴニョゴニョやっている私とは生き方が違う事を思い知らされました。また、学歴も関係ないんだなと思いました。そもそも自分はめんどくさくてイベントを探すことさえしないんですが… だれか私にイベント情報を伝えてくれー(他力本願)

ご飯・施設

大きく、綺麗な施設でした。ご飯も美味しくて豪華でした。朝ごはんはバイキング、昼ごはんは2つからの選択、夜ご飯は懐石料理てきなやつでした。幸せでした。

課題晒し

ちょっと間違ってるところも多々あるのであまり晒したくないんですけど…書きかけのメモをコピペしたので途中で文章が終わったり重複している箇所がありますが気にしないでください
自分の考えが求められそうなところは自分で書き、知識系はChatGPT、データシートの読み取りはChatPDFを活用しました。また、自分の実績的な事を求められているところはこのブログのURLを貼りました。
来年の講師の方が課題を1から考えないといけなくて困る?知ったこっちゃない

X1

(1)以下の技術用語について解説してください。またどのようなところで使われているかも述べてください。わからない場合は調べて、自分なりに解釈した結果を述べてください。
「オームの法則」「UART」「SPI(Serial Peripheral Interface)」「SDR(ソフトウェア無線)」

オームの法則は抵抗(インピーダンス)R[Ω]と電流I[A]と電圧V[V]の関係を示したものである。V=IRで表される。電気回路の設計で必ず使用されている。
UART送信と受信の2線で行う、双方向のシリアル通信である。基本的には1対1の通信である。機器同士の接続やデバッグで使用されることが多い様に感じる。クロックを同期しないことが主な特徴である。ネットワーク機器のコンソールで使用されることの多いRS-232とは電圧が異なる。
SPIは4線もしくは3線で接続する通信方式でありクロックを同期する。1対複数の通信が可能。機器内部の接続で使用されることが多い様に感じる。(EEPROMなどの)ROMとの通信で行われる。i2cよりは線が多いが通信速度が速い。
SDRは専用回路によって無線を扱うのではなく、デジタル部分は書き換え可能な様にし、様々な周波数、変調方式に対応させたものである。

(2)マイコンのファームウェアをデバッグするためには、どういう方法がありますか?

UART等を用いたコンソールにデバッグ用の出力を行ったり、JTAGを利用してメモリの状態、CPUの状態を読み取ったりする方法がある。また、エミュレータを用いる方法もある。

(3)電気には直流と交流があります。同じ電圧のとき、どちらが感電したときに危険だと思いますか?その理由と一緒に説明して下さい。また感電はどんな工夫をすれば防げるでしょうか、思いつく限り多く挙げてください。

直流の方が危険であると考えられる。直流では、流れる電流は一定である。一方交流で流れる電流は最大で直流で流れる電流である。危険であるのは電流であるため、流れる電流の時間が長い直流の方が危険である。また、交流では0Vとなる部分があるので、そのときに手を離すことができる(電流が流れると筋肉が収縮するため)が、直流ではできない。感電を防ぐ方法としては、絶縁性手袋、絶縁ブーツを着用したり、高電圧が来ている部分を物理的離す、覆う、等がある。

(4)このデータシートから、以下の情報を読み取ってください。

データシートURL:https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf
rp2040-product-brief.pdf (raspberrypi.com)

・GPIOに5.0Vを入力しようと思います。この機器は正常に動作しますか?

P616のTable621より、GPIOでの入力電圧は最大でIOVDD+0.5Vとなっている。IOVDDは最大3.63Vであるのため、最大電圧は4.13Vである。よって、5Vは動作保証電圧外であり、正常に動作するとは考えにくい。

・この機器でSPI通信は使用できますか?

SPIは使用可能である。SPIコントローラが2つ搭載されている。P503 4.4.SPIより。

・IOVDDとDVDDの違いを説明してください

IOVDDはデジタル入出力の回路に必要な電源であり、DVDDはRP2040内部(CPUや、ROM、RAM等)の回路の電源である。P154 2.9.1、2.9.2より。

・SWDポートを使うと何ができますか?

SWDポートはデバッグに使用されるポートである。そのため、SWDを使用することで
・SRAMやフラッシュメモリ内にファームウェアを読み込みできる。
・プロセサの実行/停止、ステップ、ブレークポイントの設定など
・architectural stateの取得
が可能である。P61,62 2.3.4より。

・GPIO 1ポートから標準で何mA出力できますか?またGPIO合計で最大何mAまでの電流を出力できますか?(ただしQSPIポートで使用する電流は考慮しないものとします)

デジタル入出力の回路に必要なIOVDDの最大入力電流が50mAであるため、GPIOの合計出力電流は50mAである。P618,Table674

— 以下は講義の難易度調整に用いる設問となります。必ず回答してください。誤答による減点はありませんが、講師をワクワクさせる内容を期待しています。 — 

(5) 家電もしくはIoT デバイスを分解したことはありますか。ある場合は分解した機器と、分解しようと思った思いを書いてください。(「ワクワクしたから」等が主となる理由でも問題ありません)

色々分解したことがあります。最近だとAliExpressでスマートスイッチ、ドアセンサ、温度計等々のIoT機器を買って分解・改造していました。詳しくは、ブログにまとめてるのでぜひよかったら見てみてください。(おすすめの記事:https://unagidojyou.com/2023/01-21/review_aliexpress_6dol_3set/、https://unagidojyou.com/2023/04-13/review_aliexpress_3-or-more-items-from-us-2dol/)
分解しようと思った理由ですが、複数あります。
・どんな仕組みになっているのか気になる
・安く部品が手に入る
・安全性の確認
・改造して何か別の機能を持たせられないか
などです。しかし、やはり楽しい・気になると言うのが最も根本にあるものだと思います。

(6) 機器内部のフラッシュROM / EEPROM 等の情報の吸い出しや、ファームウェアの解析や改造を行った経験はありますか。ある場合はどのような事を行ったか教えてください。(未経験でも問題ありません)

前からやってみたかったので、このレポートをきっかけにやってみました。スマートスイッチのファームウェアをバックアップとして吸い出し、Arduino IDEで記述したプログラムを書き込んでみました。これもブログにまとめているのでぜひとも見てみてください。https://unagidojyou.com/2023/05-21/ms-101_esp8285_arduino-ide/
また、Wi-FiルータにOpenWRTをインストールしたときにも、ROMの吸い出し、書き換えを行いました。この場合は、ルータ内部のUARTにアクセスして、U-Bootのコンソールからバックアップを行なったり、書き込みを行いました。

(7) 何か他にアピールしたいことがあれば、自由に書いてください。書いておきたいことはなんでも書いてください。

最近だとUSBテスタを分解・解析・改造を行いました。より広い範囲の電圧で動作する様にしたり、LCDをArduinoで動く様にライブラリを書いたりしました。ここら辺もブログに記事を書いてます。DCDCコンバータの出力電圧をマイコンで制御できるように様々な方法を試してみたりもしてます。
せっかくなので、ブログ自体についても書きます。サーバは自分で立て、自宅にあります。ただ、集合住宅のためグローバルIPアドレスを使用することができず、VPNを使用して祖父の家(戸建)を経由して公開しています。
他には、部屋のスマートスマートホーム化を進めていて、シーリングライト(100段調光)は自分で作成したものを使用しています。風量可変扇風機の作成も進めています。

X2

# 応募課題1

RP2040マイコンの仕様についてChatGPTに質問してみました。
下記RP2040のデータシートとプロダクト概要を読み、ChatGPTの回答の正誤を教えてください。誤りがある場合は正しい回答を教えてください。
また、正誤どちらの場合も根拠となる内容とそれが書かれたページ数を引用で示してください。
RP2040のデータシート等のURL:
– datasheet(build-date: 2023-03-02)
    – https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf
– プロダクト概要
    – https://datasheets.raspberrypi.com/rp2040/rp2040-product-brief.pdf

## 質問内容
RP2040に関する以下の質問に答えてください。
1. RP2040の電源にはIOVDDとDVDDがあります。それぞれの電源の役割と標準電圧を説明してください。
2. RP2040のGPIOに5.0Vを印加すると、RP2040は正常に動作しますか?
3. GPIOの1ポートから最大何mA出力できますか? またGPIO合計で最大何mAまでの電流を出力できますか?(ただしQSPIポートで使用する電流は考慮しないものとします)
4. RP2040にはQSPIインターフェイスが付いています。RP2040ではこのインターフェイスにどんなデバイスを接続して利用する想定ですか?また、そのデバイスを接続するとどういう機能が利用できますか?

## ChatGPTの回答(ChatGPT Mar 14 Version)
1. RP2040の電源には以下の2種類の電圧があります。
    – IOVDD: デジタル回路やGPIOの電源として使用される電圧で、標準的には3.3Vです。
    – DVDD: アナログ回路の電源として使用される電圧で、標準的には1.8Vです。

IOVDDがGPIOの電源であることは正しい。しかしそれ以外は誤りである。IOVDDはデジタル入出力の回路に必要な電源であり、DVDDはRP2040内部(CPUや、ROM、RAM等)の回路の電源である。IOVDDは1.8Vから3.3Vの間となっており、DVDDは通常1.1Vである。P154 2.9.1、2.9.2より。

2. RP2040のGPIOに5.0Vを印加すると、RP2040は正常に動作しません。RP2040のGPIOは3.3Vまでの電圧しか許容されておらず、それ以上の電圧を印加するとダメージを受ける可能性があります。

ただしい。

3. RP2040のGPIOから最大で16mAまでの電流を出力できます。ただし、GPIOの合計で出力できる電流は最大で120mAに制限されています。

誤りである。GPIO用の電源である、IOVDDの最大入力電流が50mAまでであるため、合計は50mAである。また、GPIO1ポートあたりの最大12mAまでの出力である。P618,Table674より。

4. RP2040のQSPIインターフェイスは、外部のフラッシュメモリやセキュアストレージデバイスなどを接続するためのものです。QSPIインターフェイスを通じてデバイスを接続することで、RP2040は高速なストレージアクセスを行うことができます。QSPIインターフェイスは、標準的なSPIインターフェイスよりも高速で、4本のデータラインを使用することで最大で80MB/sのデータ転送が可能です。

最大速度が誤りである。62.5Mbpsだと思われる。P507 4.4.3.4. Clock ratiosより。

X3

(1) マイクロコントローラーで動作するファームウェアのデバッグにはどのような方法がありますか?また、それらの手法を使ってあなたが今まで行ったデバッグの体験談や感想を教えて下さい。マイコンでの開発経験がない場合はマイコン以外のデバッグ体験談でもかまいません。

マイコンの開発はArduino IDEで利用できるものしか使用したことがないため、それを中心として話します。基本的にはトライアンドエラーです。とりあえず書いて、書き込みをして、思うように動かないことがあれば修正する、といった感じです。目に見えて動作しているかどうかわからない時は、メッセージをUART経由で送ったり、確認用LEDを点灯させたりしました。また、特定の関数が動作するか不明の場合は、その関数用のテストベンチを作成して、マイコンに書き込んで動作確認などをしました。いつもやっていることなので感想とかはあまりないですが、デバッグは沼らなければ楽しいです。
大学の実験でISE Design Suite(言語はVerilog)を使用して、LSIの設計を行ったことがありますが、その際はデバックはテストベンチを作成してその上でプログラムを実行してデバックを行いました。
また、使用したことはありませんが、J-TAGを使用したデバッグなどもあるようです。

(2) Linux 6.1で、これまでカーネル開発に使われたCに次ぐ第二の言語として Rust が追加されました。C++ を Linux カーネルで使用する議論をかつて痛烈に批判した Linux の開発者リーナス・トーバルズの同意を得て Rust が追加されたことは大きな話題になりました。なぜここに Rust が加われたのか、リーナスの視点を念頭に置いて考察し論じてください。

C++が採用されなかった理由としては、高機能であるが、比較的簡単にプログラムをかける一方、メモリ管理が手動であったり、不完全でもコンパイルが通ってしまったようである。その結果、不完全なプログラムが作成されるようになってしまい、Linus氏はそれを大変嫌ったようだ。Rustは同等の速度でそれらの問題が克服されている。特に。C/C++に無くRustにある特徴としてメモリの管理が厳格かつセキュアであるというものがある。Linuxカーネルでは、近年メモリ関連のバグが急増して、Linus氏はそれに悩まされていたようだ。そこで、Rustの導入を受け入れたようだ。
参考文献:https://static.sched.com/hosted_files/osseu2022/04/osseu-kr.pdf

(3) USB 機器が任意の電圧による電源供給を受けられる規格として USB Power Delivery があります。最初に登場し、USB Type-A 端子と Type-B 端子を利用する USB PD Revision 1.0 はほとんど普及しませんでしたが、Type-C 端子と共に登場した USB PD Revision 2.0 は広く普及しました。この要因を自由に考えて述べてください。規格そのものの差分だけではなく、より広い視点で記述された考察を期待します。

まず初めにPD1.0が普及しなかった理由を考えた。
Quick Charge(以下QC)が存在しており、競争に負けたのだと考える。負けた理由はいくつか考えられる。まず初めに、Quick Chargeは2012年に発売の端末ですでに搭載済み(PD 1.0は2012年に規格化)であり、発表、普及が早かった。しかしながら、当時のQuick Charge1.0は10Wまでだった。これはUSB PD 1.0の100Wと比べ非常に小さい。ただ、当時はバッテリーが大きなデバイスが存在せず、10Wで十分であった。また、Quick Charge2.0が2014年と必要な時期にでたため、PDは必要なかったのだと思われる。QualcommのQuick Chargeは自社チップに搭載することが可能であったため端末のメーカは簡単に搭載ができ、強力に規格の普及を牽引することができた。ノートパソコンの充電規格として普及しなかった理由は別にあると考えられる。それは、PCにUSB Type-Bが必要なかった点である。PD1.0で充電を行うには、USB Type-Bの搭載が必要であったが、当時のノートパソコンにUSB Type-Bは搭載する必要性がなかった。そのため、わざわざコストのかかるUSB PD 1.0は採用されなかったのだと思う。
続いて、PD2.0が普及した理由を考えた。
PD2.0が普及した理由としてはUSB Type-Cが素晴らしい端子であったのと、Appleが参加したこと、Quick Charge4に取り入れられたのが大きな理由だと考えられる。USB Type-C素晴らしさは言うまでもないが、AppleのThunderbolt3がUSB Type-C端子を使用することとなり、MacbookにType-C端子のみを搭載し、PD2.0による充電を採用したのが大きな推進となったのだと思われる。これによって、ノートパソコンへの搭載が進んだと考えられる。また、それまでのMicro USBが様々な問題を抱えていたのもUSB Type-Cの搭載が迅速に進んだ原因だと思われる。Quick Charge4からはPDを内包するようになり、競合が起きなくなった。その結果、USB Type-Cの普及とともにPD 2.0が普及したのだと思われる。

(4) Wi-Fi による無線通信が可能なマイコン、MOSFET、モーターの3つを組み合わせて車のラジコンを作りました。マイコンと通信するためのスマートフォンのプログラムと、制御コマンドを受け取ったマイコンが MOSFET を駆動しモーターを回転させるプログラムも開発しました。しかし実際に前進コマンドを送ってみると、何度試しても、一瞬ラジコンが前に進んだあとすぐに停止してスマートフォンとマイコンの通信が切断してしまいます。しばらくすると再度通信可能になるので、不可逆的な故障は生じていないようです。ラジコンが前進し続けずに通信が切断するという現象の例と要因を考察し列挙してください。可能であればその調査方法と具体的な対策も挙げてください。

症状から、Wi-Fiが切断されていることが推測できる。Wi-Fiが切断されている理由として最も考えられるのが、モーターからのノイズである。モーターが原因か断定する方法であるが、モーターを切断して、代わりにLEDなどの目標をつけて実験するのが有用である。ラジコンによく使われる、マブチモーターは、ブラシ付きDCモーターである。ブラシ付きモーターではブラシと整流子がすれて接続されているため、整流子が切り替わるたびにスパークが発生してノイズが発生する。また、ブラシと整流子の間に酸化皮膜が存在すると、その度にノイズが発生する。これらのノイズが電波へ干渉し、Wi-Fiのシンボルが欠落するなどして、切断されるのだと考えられる。これを防ぐ方法としては、コンデンサの設置が有用である。コンデンサをモーターの+と-の間に設置することによって、導線を伝ってのノイズの伝播を防げたり、スパークを抑制することができる。これによって、ノイズが減少しWi-Fiの切断を防ぐことができる。また、パスコンの設置に加えて、モーターを電磁遮蔽することも有用だと考えられる。

(5) 市販される無線ルーターの筐体は、ふつう、特殊なネジを使って組み立てられていて、分解が難しくなっています。無線ルーターは電波を発射するために法で定められた基準を満たした機器であることを念頭に置き、分解が難しくなっている理由を回答してください。

分解が難しくなっている理由としては、改造を防ぐためだと考えられる。日本には電波法が存在しており、無免許で扱うことのできる周波数、電力が制限されている。しかしながら、海外にも商品が展開されていることが多い無線機器は基板が共通となっていることが多い。そのため、改造して無線強度をあげることができたりする。もし、改造方法がマニュアル化されてしまった時に、分解が難しいかどうかで改造される数に大きく差がでると考える。もし、分解が難しければ、それなりの技術力とやる気のある人しか行わない。しかしながら、分解が簡単であれば、そこまでの技術力を持っていない人でもできてしまう。その結果より多くの人が改造を行ってしまい、電波法違反の状態が常態化してしまうかもしれない。改造した物を販売する業者も現れるかもしれない。このような事態を防ぐために分解が難しくなっているのだと考える。

(6) 本トラックでは工作、電気回路、Linux、Python、Web3言語 (HTML, CSS, JavaScript) に触れることを通じてすべてのレイヤーを渡り歩きます。意気込みを教えて下さい。(この分野が最も気になる、など)

自分はこれまで、様々な物を分解改造、作成して様々なレイヤーをいじってきましたが、薄く広くといった感じなため、この期に是非技術力を磨きたいです。このゼミではWi-Fiルータを改造して、キャタピラをつけるとのことですが、似たことを自分もしようとしていたため、非常に興味があり技術を習得したいです。似たことをしようとしてしていたと言うのは、Wi-FiルータにOpenWRTを入れて改造を行ったりしてきたことがあるので、その時の技術を活かせたらいいなと思います。また、不良在庫のWiFiルータをただ同然で買い取って、OpenWRTのファームウェアをビルドしようとしたことがあります。結果的に、コンフィグを書いている途中に知識不足でギブアップしたので、このゼミでぜひそこの知識・技術を身につけたいです。
この件については、ブログにいろいろ書いたので、ぜひみてください。
https://unagidojyou.com/tag/uroad-home/
モータードライバの作成はしたことはないですが、電子工作はよくするため、技術力を磨きたいです。Linuxは自分のブログサーバだったり、VPNサーバ、Homebridgeなどで触れているため比較的馴染み深いですが、表面的な部分しか触ったことがないです。そのため、
在庫不良のWiFiルータをタダ同然で買い取って、OpenWRTをビルドしようとしようとしたことがありますが、コンフィグを書いているときに挫折したので、そのあたりの知識を特に身につけたいです。また、Web3もほとんど触れたことが無いため、技術を習得してみたいです。
前半の話はブログに色々書いてあるのでぜひとも見てみてください。https://unagidojyou.com/tag/uroad-home/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)