Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
%sの話
Search
NV
September 15, 2018
Technology
1
1.4k
%sの話
@IoTSecJP東京 Version4.0
NV
September 15, 2018
Tweet
Share
More Decks by NV
See All by NV
ゲームのボツデータを見てみよう
nvsofts
1
510
eMMCの話
nvsofts
2
2.2k
DOOMに関するあれこれ
nvsofts
0
490
よくあるバックドアの話(公開版)
nvsofts
2
540
IoTハックに使える買って良かったと思うもの
nvsofts
0
2.2k
BLEな()おもちゃを調べてみる
nvsofts
3
1.3k
Other Decks in Technology
See All in Technology
Kiroから考える AIコーディングツールの潮流
oikon48
4
680
九州の人に知ってもらいたいGISスポット / gis spot in kyushu 2025
sakaik
0
110
Google Cloud で学ぶデータエンジニアリング入門 2025年版 #GoogleCloudNext / 20250805
kazaneya
PRO
19
4.3k
MCP認可の現在地と自律型エージェント対応に向けた課題 / MCP Authorization Today and Challenges to Support Autonomous Agents
yokawasa
5
2.1k
Rubyの国のPerlMonger
anatofuz
3
730
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
120
大規模イベントに向けた ABEMA アーキテクチャの遍歴 ~ Platform Strategy 詳細解説 ~
nagapad
0
200
【CEDEC2025】『Shadowverse: Worlds Beyond』二度目のDCG開発でゲームをリデザインする~遊びやすさと競技性の両立~
cygames
PRO
1
340
反脆弱性(アンチフラジャイル)とデータ基盤構築
cuebic9bic
3
170
✨敗北解法コレクション✨〜Expertだった頃に足りなかった知識と技術〜
nanachi
1
650
LLMをツールからプラットフォームへ〜Ai Workforceの戦略〜 #BetAIDay
layerx
PRO
1
920
マルチモーダル基盤モデルに基づく動画と音の解析技術
lycorptech_jp
PRO
5
570
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
328
39k
How GitHub (no longer) Works
holman
314
140k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
It's Worth the Effort
3n
185
28k
The Language of Interfaces
destraynor
158
25k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
GitHub's CSS Performance
jonrohan
1031
460k
Navigating Team Friction
lara
188
15k
Making Projects Easy
brettharned
117
6.3k
Practical Orchestrator
shlominoach
190
11k
Transcript
%sの話 NV (@nvsofts)
自己紹介 名前:NV ◦ Twitter: @nvsofts 個人サークル「えぬえす工房」代表 ◦ https://www.ns-koubou.com/ ◦ 最近は市販機器をハックする同人誌を書いています
普段は都内にあるセキュリティ会社でIoTセキュリティなどをやっています
%s
お察しの通り 今回は、sprintf()などで使用する書式文字列である”%s”に関する話です
これ、IoT関係あるの??
これ、IoT関係あるの?? あります!
これ、IoT関係あるの?? あります! 実は特定の使われ方で見かけることがあるからです ◦ 何度も見かけているので、偶然ではないはずです
使われ方 1. どこかから入力を取ってくる 2. 入力と書式文字列を元にsprintf()系関数でコマンドを作成する 3. 作成したコマンドをsystem()関数で実行する
コード例 ARM Linuxで、以下のコードをコンパイルした際のアセンブリコードを見る int main(int argc, char *argv[]) { char
buf[1024]; if (argc != 2) { return 1; } snprintf(buf, sizeof(buf), "cp %s data", argv[1]); system(buf); return 0; }
アセンブリコード
アセンブリコード
アセンブリコード
プログラムの動作 引数に与えられたファイル名をdataというファイル名でコピーする 例:/etc/hoge.datをdataというファイル名でコピーする $ ./test /etc/hoge.dat
これって・・・ 脆弱性あるのでは?って思った人
これって・・・ 脆弱性あるのでは?って思った人 → 正解!
これって・・・ 脆弱性あるのでは?って思った人 → 正解! OSコマンドインジェクションの脆弱性があります
脆弱性を突く 例えば、こういうコマンドにしたら? $ ./test '; echo Hello!; /bin/true '
脆弱性を突く 例えば、こういうコマンドにしたら? $ ./test '; echo Hello!; /bin/true ' 実際に実行されるコマンドは
cp ; echo Hello!; /bin/true data となる
なんでこんなのがあるのか? (独断と偏見が多分に入っています)
なんでこんなのがあるのか? (独断と偏見が多分に入っています) → C言語を「すごいシェルスクリプト」として使っている可能性? ◦ 組み込みLinuxを「面倒なことをやってくれるやつ」的な扱いをしている? ◦ 単にコマンドを実行する用途にsystem()関数を使うあたり、そういう感じがする
なんでこんなのがあるのか? (独断と偏見が多分に入っています) → C言語を「すごいシェルスクリプト」として使っている可能性? ◦ 組み込みLinuxを「面倒なことをやってくれるやつ」的な扱いをしている? ◦ 単にコマンドを実行する用途にsystem()関数を使うあたり、そういう感じがする → sprintf()系関数は入門者でも知っているくらい有名
◦ とりあえずこれ使えばやりたいことを実現できる、的な考え?
対策 入力をサニタイズする ◦ 一般的な対策
対策 入力をサニタイズする ◦ 一般的な対策 そもそもsystem()関数を使わない ◦ system()関数はシェルを通すため、’;’などのシェルで意味を持つ文字が使える ◦ fork()してexec()するならそういうことはない ◦
もちろん、/bin/sh –c ~をexec()したらダメ ◦ 加えて、想定外の文字種が入っていないかの検査もするべき
まとめ sprintf()系関数とsystem()関数の組み合わせは、脆弱性を生む可能性 が高い 実行ファイルの文字列を”%s”などで検索すると、脆弱性が見つかるかも? ◦ 今回はこれが言いたかった