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
イ良い日ンマを作る(USBストレージ容量偽装の手法) / USB Storage Capaci...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shutingrz
February 04, 2023
Technology
2.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
イ良い日ンマを作る(USBストレージ容量偽装の手法) / USB Storage Capacity Faking Techniques
shutingrz
February 04, 2023
More Decks by shutingrz
See All by shutingrz
Analyze AutoMotive ECU
shutingrz
3
5.2k
KnotResolverへの毒入れ~世にも珍しいKashpureff型攻撃~ / Hack_to_KnotResolver
shutingrz
0
670
DNSトンネリングの手法 / A technique of DNS tunneling (#ssmjp)
shutingrz
12
4k
JC3が教える! Gozi/DreamBot 判別法 / analysis_JC3_checksite
shutingrz
1
770
Other Decks in Technology
See All in Technology
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
100
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
2
710
FOSS4Gを活用した自治体業務DXの試み
470715
0
150
全PRの83%が AIレビューだけでマージできるようになった開発組織は その後どうなったか @2026/10
athug
0
150
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
950
AI時代のPRレビューにどう向き合うか?
kairim0
1
220
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
140
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
140
しろおびから始める!ログ活用の第一歩
shumei_ito
0
930
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
370
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
260
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
130
Featured
See All Featured
Faster Mobile Websites
deanohume
310
32k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
440
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
Paper Plane (Part 1)
katiecoart
PRO
2
11k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
Abbi's Birthday
coloredviolet
4
10k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
520
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
710
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
For a Future-Friendly Web
brad_frost
184
10k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Transcript
イ良い日ン マを作る しゅーと
イ良い日ン マとは • 2018年、突如ネット上に現れたmicroSD • アググンと呼ばれるものもある • 基本的に容量偽装系ストレージ • 2022年、SSDに形を変えて
パンピーを襲っている
容量偽装について • 実際のフラッシュ領域に対しての見せかけが異なる • 使えないわけではない • 返品期限までごまかすため? • 偽装方法には大きく2種類 •
無視タイプ • 上書きタイプ https://www.rescue-center.jp/elementary/vol54.html
目標 • 任意の容量だと嘘をつく • 1ペタバイトを目標 • 書き込めるけど一定のサイズを超えると異常動作を起こす • 無視または上書き動作
その前に
USBデバイスを作る方法
USBデバイスを作る方法 • USBデバイスICを使う • 汎用マイコン内蔵のUSB PHYを使う • USBエミュレーションツールを使う
Facedancer • USBデバイスのエミュレーションライブラリ(Python製!) • 対応ハードウェアのUSB APIを利用して機能を実現 • GreatFET Oneと呼ばれるボードが現在最も再現性が高い •
今年6月発売のLUNAに合わせて進化を遂げるらしい GreatFET One LUNA
facedancer-umass.py • イメージをマスストレージデバイスとして流し込むスクリプト • 以下で簡単にディスクイメージを作って接続できる • 接続するとターゲット上で認識される(未初期化) # 100MBサイズのディスクイメージ (何も初期化しない)
dd if=/dev/zero of=disk_100MB.bin bs=100M count=1 # スクリプト実行 ./legacy-applets/facedancer-umass.py ./disk_100MB.bin コントロール用 USBポート ターゲット用 USBポート
メモ: オンメモリだけで実現も • コードからfdを排除し全てdictに • プログラム終了時にはデータが失われる
任意の容量と嘘をつく
ストレージサイズはどう認識される? • UMS(USB Mass Storage)クラスではSCSIコマンドを利用する • Read Capacity(10)でセクタ数とブロックサイズを提示 • PCがそこからディスクのサイズを割り出す
Facedancerでの実装 • ブロックサイズは512バイト固定 • セクタ数は読み込まれるイメージから算出される →ここを変更すれば任意のサイズを宣言できる! • ただしコードが全て最大32bit LBA •
現状は2TiBまでのディスクしか対応しない (GPTであれば認識可能だが) • →64bit LBA対応に改造して問題を回避👏 https://github.com/shutingrz/Facedancer/commit/0fcd48586a1e20b568d6d11d3408c8e854dba1f8
未初期化状態の罠 • リムーバブルディスクだと未初期化を未初期化と認識しない • →全セクタを走査しパーティションを探してるっぽい?→遅い!! • Windowsでのフォーマット時にメタデータを 全セクタに書き込む→遅い!! • 10MBのディスク+FAT32で2分ちょっとかかる
• Facedancerで偽装する場合は事前にフォーマットしないと無理
手始めに100GBの仮想ディスクを初期化 • 以下のコマンドで事前にexFATでフォーマット • 問題なく100GBとしてマウントできた #100GBのスパースファイルを作成しGPT作成、exFATでフォーマット $truncate –s 100GB test.img
$parted –s test.img mklabel gpt mkpart primary ntfs 1MiB 100% print quit $sudo losetup –f –show test.img $sudo kpartx –a /dev/loop2 $sudo mkfs.exfat /dev/mapper/loop2p1 # スクリプト実行 $./legacy-applets/facedancer-umass.py ./test.img
調子に乗って2ペタバイト !? $truncate -s 2PB test.img truncate: failed to truncate
'test.img' at 2000000000000000 bytes: File too large
ext4の制限 • ext4 >このファイルシステムは、最初にLinuxカーネル2.6.19でスト レージ制限を拡張し、パフォーマンスを向上させるために使用さ れていました。 Ext2およびExt3と比較すると、Extファイルシス テムは標準の4Kブロックサイズを使用して、最大1EBのボ リュームサイズと最大16TBの単一ファイルサイズをサポートで きます。
btrfsの中にスパースファイル作成 • btrfsは16EBの単一ファイルをサポート • 10GBのbtrfsイメージを作りその中で2PBのディスクを作成 • うまくいった • あとはいつも通りGPTからのexFATのフォーマット $truncate
-s 10GB btr.img $mkfs.btrfs btr.img $sudo mount btr.img /mnt/target1 $ truncate -s 2PB /mnt/target1/test.img <- いけた! $ ls –la /mnt/target1/test.img -rw-r--r-- 1 user user 2000000000000000 Jan 25 01:46 <- 2PBのファイル /mnt/target1/test.img
2PBのUSBドライブを見よ! • 無事マウントに成功 • Facedancerの微修正が必要 • ただしマウント完了まで30分必要 • 全セクタを読み込むため •
こういうものなの? • 容量偽装はできたので、 時間かかる2PBは一旦封印
目標 • 任意の容量だと嘘をつく • 1ペタバイトを目標 • 書き込めるけど一定のサイズを超えると異常動作を起こす • 無視または上書き動作 💮
一定のサイズを超えると異常動作を起こす • 今はbtrfsの実サイズを超えたら書き込みエラーが発生するはず • アググン/イ良い日ン マは書き込み自体はできる • イ良い日ン マ実現までの道のり: •
4GBのディスクイメージを用意 • 32GBとみせかける • 書き込み要求セクタが4GBより上位の場合は書き込まない • 偽装と書き込み無視は全てFacedancer側で対応可能 • 特定セクタより上の場合はprint()するだけのコードを書いた↓
試した が・・・ • 転送速度が遅すぎて検証にならない • コントロールがwsl2のためUSB-IPで転送しているのも原因か • もっとディスクサイズを減らすことに 350 KB/s
というわけで見かけ32MBのディスク • ディスクイメージは16MB確保 • 15MB分のセクタを超える場合書き込みを行わないように
テストデータ • 1つあたり1.08MBのjpgファイル • 14枚目の途中で特定セクタに到達 する計算
デモ(1) • 途中で書き込みされなかった画像ファイル
デモ(2) • 事象発生時のログと空き容量
目標 • 任意の容量だと嘘をつく • 1ペタバイトを目標 • 書き込めるけど一定のサイズを超えると異常動作を起こす • 書き込み無視 💮
💮
まとめ • あくまでUSBエミュレーションを使ったものだができた • イ良い日ン マの作り方を完全に理解した • 実際にやるにはちゃんとしたICでのネイティブ実行が必要 • Pico
にUSBコントローラがあるのでTinyUSBライブラリで優勝?
おわり