Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
激安Linuxボード G-cluster改造のすべて
Search
gpioblink
July 18, 2020
Technology
10k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
激安Linuxボード G-cluster改造のすべて
gpioblink
July 18, 2020
Other Decks in Technology
See All in Technology
推論基盤と Scale-Up Interconnect の現状と制約から俯瞰する技術動向
markunet
2
820
Maestro MCPとClaude Code Skillsによる自律的なE2Eテスト支援
asmz
0
420
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
3k
IoTとは〜? 数字で見るSORACOM UG【SORACOM UG Explorer 2026】
soracom
PRO
0
190
eBPF 簡介 2026 版
shunghsiyu
0
190
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
1
180
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
4
280
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
300
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
150
kintoneで在庫管理システムを作るときの要件定義・設計ポイント
kai0707
0
230
分析作業をどこまで任せるか自分で決められる AIネイティブBI『Golden Analytics』が 良さげな話 /golden-analytics-is-ai-native-bi
shinyaa31
0
120
TSKaigi Sendai 2026 - tsgo時代のTypeScript Playgroundはどう動くか
teamlab
PRO
0
100
Featured
See All Featured
Side Projects
sachag
456
43k
30 Presentation Tips
portentint
PRO
1
460
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Prompt Engineering for Job Search
mfonobong
0
570
HDC tutorial
michielstock
2
1k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
300
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
Code Reviewing Like a Champion
maltzj
529
40k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
3
1.2k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
320
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
320
Transcript
激安Linuxボード G-cluster改造のすべて @gpioblink じぶりん
About me じぶりん @gpioblink 会津大学 学部3年 山田 快 ❖ 英語吹き替え版アニメは神
❖ ゲームは遊ぶより改造する ❖ 進捗出すために自己管理中 [好きなもの] 地球
使えなくなったハードを再利用するの大好き❤
趣味で電子機器の修理をしたりもします
今回の話の目標 ハードウェアハッキングの 楽しさを知ってほしい!!
G-clusterで学ぶ組み込みLinux入門 - 目次 講義編 • Gclusterって何? • GPLソースコードは読んでて楽しい 実演編 •
G-Cluster用のシェルを作る • Gclusterをリバースエンジニアリングして任意コード実行してみた
G-clusterで学ぶ組み込みLinux入門 - 目次 講義編 • Gclusterって何? • GPLソースコードは読んでて楽しい 実演編 •
G-Cluster用のシェルを作る • Gclusterをリバースエンジニアリングして任意コード実行してみた
Gclusterって何?
G-clusterは、次世代のクラウドゲーム機!!
G-clusterは、次世代のクラウドゲーム機!!
G-clusterは、次世代のクラウドゲーム機!!
G-clusterは、次世代のクラウドゲーム機!!
G-clusterは、次世代のクラウドゲーム機!! 終わってます。。
でも、ハード的にはそこそこのスペックで Cavium CNW6611L SoC 256MB NANDストレージ (1Gbit/SLC) 512MB メモリ(2Gbit/16bit DDR3
SDRAM) WiFi / USBポート / HDMI出力 UART(要分解)
でも、ハード的にはそこそこのスペックで Cavium CNW6611L SoC 256MB NANDストレージ (1Gbit/SLC) 512MB メモリ(2Gbit/16bit DDR3
SDRAM) WiFi / USBポート / HDMI出力 UART(要分解) 激安
でも、ハード的にはそこそこのスペックで Cavium CNW6611L SoC 256MB NANDストレージ (1Gbit/SLC) 512MB メモリ(2Gbit/16bit DDR3
SDRAM) WiFi / USBポート / HDMI出力 UART(要分解) 激安
つまり、gcluster = 格安Linuxボード Cavium CNW6611L SoC 256MB NANDストレージ (1Gbit/SLC) 512MB
メモリ(2Gbit/16bit DDR3 SDRAM) WiFi / USBポート / HDMI出力 UART(要分解)
つまり、gcluster = 格安Linuxボード UART(シリアル通信)して始めましょう
つまり、gcluster = 格安Linuxボード
つまり、gcluster = 格安Linuxボード 実演編では、任意コード実行できるように改造して G-clusterにセカンドライフをおくって貰います!!
G-clusterで学ぶ組み込みLinux入門 - 目次 講義編 • Gclusterって何? • GPLソースコードは読んでて楽しい 実演編 •
G-Cluster用のシェルを作る • Gclusterをリバースエンジニアリングして任意コード実行してみた
GPLソースコードは読んでて楽しい
LinuxのGPLソースコードの面白い点3つ 製品のコードを知れちゃう マルヒ情報もあったり 楽しいコード流用の世界
GPLは楽しい: 製品のコードを知れちゃう そもそもGPLライセンスとは
GPLは楽しい: 製品のコードを知れちゃう そもそもGPLライセンスとは ソー ス コー ドを 公 開 す
る 義 務 の あ る ライセ ン ス
GPLは楽しい: 製品のコードを知れちゃう そもそもGPLライセンスとは ソー ス コー ドを 公 開 す
る 義 務 の あ る ライセ ン ス
GPLは楽しい: 製品のコードを知れちゃう そもそもGPLライセンスとは ソー ス コー ドを 公 開 す
る 義 務 の あ る ライセ ン ス
GPLは楽しい: 製品のコードを知れちゃう 特に製品にLinuxを使ってると • LinuxカーネルはGPLライセンス • ブートローダーのU-BootもGPLライセンス • その他の低レイヤーレベルのOSSのコードもほとんどGPLライセンス
GPLは楽しい: 製品のコードを知れちゃう 特に製品にLinuxを使ってると • LinuxカーネルはGPLライセンス • ブートローダーのU-BootもGPLライセンス • その他の低レイヤーレベルのOSSのコードもほとんどGPLライセンス → 製品のほぼすべての
ソースコードを見ることができる!!
GPLは楽しい: 製品のコードを知れちゃう しかも、定義的にはこんな感じだから (Wikipedia)
GPLは楽しい: 製品のコードを知れちゃう しかも、定義的にはこんな感じだから (Wikipedia)
GPLは楽しい: 製品のコードを知れちゃう しかも、定義的にはこんな感じだから (Wikipedia) 心理的安全性を保ちながら解析もできる!!
GPLは楽しい: マルヒ情報を知れるかも GPLコードを漁ってると、 いろんなドキュメントが出て くることが
あとは適当にGPL漁ってると
あとは適当にGPL漁ってると
あとは適当にGPL漁ってると なんかConfidentialって書いてる
この他にも商用アプリ側のソースコードもざくざく
この他にも商用アプリ側のソースコードもざくざく
楽しいコード流用の世界 実はハードは同じ会社が作ってるらしく
楽しいコード流用の世界 実はハードは同じ会社が作ってるらしく メガドライブミニのコードの中に、 ファミコンミニのコントローラのkeymap用のコードの残骸が入っていたり。。。
楽しいコード流用の世界 実はハードは同じ会社が作ってるらしく メガドライブミニのコードの中に、 ファミコンミニのコントローラのkeymap用のコードの残骸が入っていたり。。。 残骸まみれの結構泥臭い世界 読んでて飽きない!!
楽しいコード流用の世界 実はハードは同じ会社が作ってるらしく メガドライブミニのコードの中に、 ファミコンミニのコントローラのkeymap用のコードの残骸が入っていたり。。。 残骸まみれの結構泥臭い世界 読んでて飽きない!! コード流用について詳しく知りたい方は HoneyLabさんの本よむのがおすすめです!
講義編のまとめ • G-clusterは、ゲーム機としては終わってるけど激安Linuxと して使える • 企業のプロダクトがのぞき見できるGPLソースコードは面白 い
G-clusterで学ぶ組み込みLinux入門 - 目次 講義編 • Gclusterって何? • GPLソースコードは読んでて楽しい 実演編 •
G-Cluster用のシェルを作る • Gclusterをリバースエンジニアリングして任意コード実行してみた
では、GPLコードをありがた〜く使いながら、 どんどん改造を進めていきましょう!!!
G-Cluster用のシェルを作る
シェルなんて簡単????? そんなことないわw
Gclusterのテレビ画面出力はremotectl_pipe経由
Gclusterのテレビ画面出力はremotectl_pipe経由 GUIを直接自由にいじれない。。。
でGPLコード読み漁ってみると。。。。 echo gc_warning Firmware found > /cavium/remotectl_pipe
でGPLコード読み漁ってみると。。。。 echo gc_warning Firmware found > /cavium/remotectl_pipe ここいじったら反映された!!
とはいえUSBキーボード取得できないので /dev/event1 からとれるキーボードのデータを見て
とはいえUSBキーボード取得できないので LinuxのカーネルとStackOverFlowを 参考にコードを書いて
とはいえUSBキーボード取得できないので
あとは頑張ってキーボード処理するコード書いて
できたもの
G-clusterで学ぶ組み込みLinux入門 - 目次 講義編 • Gclusterって何? • GPLソースコードは読んでて楽しい 実演編 •
G-Cluster用のシェルを作る • Gclusterをリバースエンジニアリングして任意コード実行してみた
無改造で任意コード実行までの道のり
ここまでいろいろ話してきましたが、、、 作成したプログラムの実行には、
ここまでいろいろ話してきましたが、、、 作成したプログラムの実行には、 殻割り&UART取り出しが 必須でした
ここまでいろいろ話してきましたが、、、 作成したプログラムの実行には、 殻割り&UART取り出しが 必須でした
ここまでいろいろ話してきましたが、、、 作成したプログラムの実行には、 殻割り&UART取り出しが 必須でした 100個も殻割りするの めんどくせ〜〜
そこで、かんがえた
本体を改造せずに、簡単にハックする方法があれば。。 そこで、かんがえた
とりあえず、安定のGPLコード読み返してみると
とりあえず、安定のGPLコード読み返してみると なんか USBでUpgradeできそうな 機能あるじゃん
とりあえず、安定のGPLコード読み返してみると なんか USBでUpgradeできそうな 機能あるじゃん
とりあえず、安定のGPLコード読み返してみると なんか USBでUpgradeできそうな 機能あるじゃん
とりあえず、安定のGPLコード読み返してみると なんか USBでUpgradeできそうな 機能あるじゃん
とりあえず、安定のGPLコード読み返してみると なんか USBでUpgradeできそうな 機能あるじゃん USBのルートに「cameo_factory」なるフォルダ作ってそこにイメージぶちこむと どうやらfwimgに投げてくれるらしい
とりあえず、安定のGPLコード読み返してみると なんか USBでUpgradeできそうな 機能あるじゃん USBのルートに「cameo_factory」なるフォルダ作ってそこにイメージぶちこむと どうやらfwimgに投げてくれるらしい USBメモリを挿して起動するだ けで、 任意コード注入できそう!!
しかし、そんな単純ではなかった。。
試しにGPLソースビルドして入れてみたら
試しにGPLソースビルドして入れてみたら アップグレード自体はできたけど
試しにGPLソースビルドして入れてみたら アップグレード自体はできたけど 署名がないせいでブートできなかった。。
試しにGPLソースビルドして入れてみたら アップグレード自体はできたけど 署名がないせいでブートできなかった。。 ここからは、この署名チェックの回避方法に 焦点をあてて説明していきます!!!
どうやって回避しよう • 頑張って本体から認証キーを取り出す(失敗) • fwimgまわりに別の脆弱性がないか探す(成功)
頑張って本体から認証キーを取り出す(失敗)
頑張って本体から認証キーを取り出す(失敗) ブート時にU-bootから呼ばれているソースコード静的解析して頑張ってみます
頑張って本体から認証キーを取り出す(失敗) ファームウェアのダンプ機能なんてないので、
頑張って本体から認証キーを取り出す(失敗) ファームウェアのダンプ機能なんてないので U-Bootの「md - memory display」機能で ダンプしてBinaryBlobに書き戻すw
頑張って本体から認証キーを取り出す(失敗) そして、それっぽいデータが取れました
頑張って本体から認証キーを取り出す(失敗) とりあえずGPLコードに入れてREADMEとか調べてみると
頑張って本体から認証キーを取り出す(失敗) とりあえずGPLコードに入れてREADMEとか調べてみると やっぱりご丁寧にGPLにDVUについての解説が!!
頑張って本体から認証キーを取り出す(失敗) とりあえずGPLコードに入れてREADMEとか調べてみると やっぱりご丁寧にGPLにDVUについての解説が!!
頑張って本体から認証キーを取り出す(失敗) とりあえずGPLコードに入れてREADMEとか調べてみると やっぱりご丁寧にGPLにDVUについての解説が!!
頑張って本体から認証キーを取り出す(失敗) とりあえずGPLコードに入れてREADMEとか調べてみると やっぱりご丁寧にGPLにDVUについての解説が!! dvu.binの中に鍵が入ってそう!!
頑張って本体から認証キーを取り出す(失敗) とりあえずGPLコードに入れてREADMEとか調べてみると やっぱりご丁寧にGPLにDVUについての解説が!! あ、これはリークではないんですね dvu.binの中に鍵が入ってそう!!
頑張って本体から認証キーを取り出す(失敗) それで、このdvu.binをghidraで静的解析してみたけど どこにも鍵っぽいのは見つからなかった。。。
頑張って本体から認証キーを取り出す(失敗) もう一度README見返したら
頑張って本体から認証キーを取り出す(失敗) もう一度README見返したら
頑張って本体から認証キーを取り出す(失敗) もう一度README見返したら
頑張って本体から認証キーを取り出す(失敗) もう一度README見返したら 解析は不可能じゃないけど、ちょっと大変そう。。 (CTFの問題が本当に使えるんだなと思った瞬間)
頑張って本体から認証キーを取り出す(失敗) というわけで、こちらは最後の手段として、 別の方法を考えていきます!
fwimgまわりに別の脆弱性がないか探す(成功)
fwimgまわりに別の脆弱性がないか探す(成功) こちらもソースコード非公開だったので、ghidraで静的解析
fwimgまわりに別の脆弱性がないか探す(成功) こちらもソースコード非公開だったので、ghidraで静的解析 関数名とか自分でつけ直して、関数を推測していきました!!
fwimgまわりに別の脆弱性がないか探す(成功) こちらもソースコード非公開だったので、ghidraで静的解析 関数名とか自分でつけ直して、関数を推測していきました!! ① まずは「factory.img」ヘッダ部分からDSM232の文字列を確認して
fwimgまわりに別の脆弱性がないか探す(成功) こちらもソースコード非公開だったので、ghidraで静的解析 関数名とか自分でつけ直して、関数を推測していきました!! ②暗号化の有無によって条件分岐
fwimgまわりに別の脆弱性がないか探す(成功) こちらもソースコード非公開だったので、ghidraで静的解析 関数名とか自分でつけ直して、関数を推測していきました!! ③ 次はアプリケーションのインストール。ん、なんか実行してね?
fwimgまわりに別の脆弱性がないか探す(成功) こちらもソースコード非公開だったので、ghidraで静的解析 関数名とか自分でつけ直して、関数を推測していきました!! ③ 次はアプリケーションのインストール。ん、なんか実行してね?
fwimgまわりに別の脆弱性がないか探す(成功) こちらもソースコード非公開だったので、ghidraで静的解析 関数名とか自分でつけ直して、関数を推測していきました!! ③ 次はアプリケーションのインストール。ん、なんか実行してね? どうやらfactory.imgの最初のgunzipのblobをファイルにして、
fwimgまわりに別の脆弱性がないか探す(成功) こちらもソースコード非公開だったので、ghidraで静的解析 関数名とか自分でつけ直して、関数を推測していきました!! ③ 次はアプリケーションのインストール。ん、なんか実行してね? どうやらfactory.imgの最初のgunzipのblobをファイルにして、 その中のapp.shを実行している!!!!
わかったこと factory.img内にAppImageがあると、その場でその中のshが実行される (しかもfwimgはrootで動いてるので、普通にroot権限w)
わかったこと factory.img内にAppImageがあると、その場でその中のshが実行される (しかもfwimgはrootで動いてるので、普通にroot権限w) ⇓ それなら、シェルスクリプト内からsetenv叩いて、 U-Boot側に非署名ブートする設定を永続化できるのでは?
というわけで、署名チェック回避するブート書いて
というわけで、署名チェック回避するブート書いて セキュアブートの前に、署名チェックせずにブートを試す設定へ
署名チェック回避ブートを入れたイメージにしたら あとはこのfactory.imgをUSBメモリに書き込んで試してみると、、、、 元のイメージの前に、このバイパス用イメージを結合!
永続的な非署名コードの注入(CFW)に成功!! 起動時にこの画面の表示と共に、 Telnetを有効化する カスタムファームウェアを作りまし た!!
まとめ GPLソースコードよく読めばなんでもできる ハードウェアハッキングは楽しい!
おわり: みなさんもgclusterで解析に入門しよう!! https://github.com/gpioblink/build-dsm232-docker 大量にgcluster買って、 ネットラジオチューナー、 ネットワークプリンター、 Amazon dash 中継など みなさんも低コストを活かし
いろんなことに使ってみてください!!! ←dockerで簡単にGPLソースやCFW用ビルド できる環境作りました!ぜひご利用ください じぶりん @gpioblink