BadUSB

なんか流れてきたので。
USBに設計上の致命的な脆弱性が発見され、そのコードが公開される - GIGAZINE

3行で

何ができるのか

特定のデバイスファームウェアを自由に書き換えられる ↓ USBメモリをUSBキーボードとして振舞うようにしたり、USBモデムに見せかけたりできる ↓ 当該USBメモリ上のデータを改竄したり、ネットワーク通信の経路を捻じ曲げたりできる


条件によってはHID(Keyboard)経由でなんか適当な操作をされる可能性もあるけど、ファームウェア上のロジックでしか実行できないから遠隔操作とはちょっと違う
(それに、デバイスマネージャ見たらMass Storageの他にHIDが生えてくるから怪しさ満点)

何が問題なのか

  • パッケージを開けずにデバイスの挙動を変えられる
    • 逆に言えばパッケージを壊すことなく開けられるならBadUSBでなくても書き換え可能
  • 書き換えられたことを判別できない
    • BadUSBを使わずに書き換えても同じ
  • 他人から渡されたUSBメモリが信用できなくなる
    • お前は元からそんなものを信用していたのか?

→ BadUSB実証コードの公開で何か目新しい攻撃方法が出現(実用化)したわけではない

気を付けるべきこと

  • 信頼できない人の手に渡ったデバイスはそもそも信用ならない(中身が基板ごとごっそり入れ替わっているかもしれない)
  • 出所を信頼できないデバイスドライバを入れない
  • USBメモリをUSBと略さない

結論

煽りすぎじゃボケ。



追記

open-vm-tools を linux-3.10 guest で動かせるようにした

A patch for workaround of open-vm-tools(2013.04.16) for Linux 3.10 kernel.
Linux 3.10 renames create_proc_entry, struct super_block::s_frozen and changes type of callback struct dentry_operations::d_revalidate, struct inode_operations::lookup.

(edit in 8/17)
Linux 3.10 has module vmw_vmci that conflicts vmci and vmhgfs. Simply removing vmci from open-vm-tools seems to work fine.

open-vm-tools-linux-3.10.patch · GitHub

MinGW 向けにコンパイルしたプログラムで Ctrl-C が効かなくて泣いている人のために

Cygwin(というかmintty)から Windows Native なコンソールアプリケーションを動かすと Ctrl-C が無視されて SIGINT を飛ばせなくなる現象への対処法。

プログラム中のどこかで SetConsoleCtrlHandler(NULL, FALSE) を呼ぶだけ。

To enable Ctrl-C on Windows Native binary called from Cygwin binary, just call SetConsoleCtrlHandler(NULL, FALSE) in your program.

Boost.勉強会 #8 大阪 で喋ってきました +新見観光のおまけつき

移動記録

2/10

住居探しのために前日入り。

2/12

徒歩移動のみ。

  • 1100- 本編
  • 1800- 懇親会
2/12

新見市縄文土器展のついでに鍾乳洞めぐり。

  • 745- 大阪→姫路
  • 909- 姫路→岡山
  • 1005- 岡山→新見
  • 1110- 新見でレンタカー借りる
  • 1150- 井倉洞
  • 1300- 蕎麦屋
  • 1410- 満奇洞
  • 1530- 猪風来美術館
  • 1630- 近くで取れたイノシシを焼いて食べる簡単なおしごと
  • 1830- 撤収
  • 1910- 新見でレンタカー返却
  • 2007- 新見→出雲市
2/13

エクストリーム帰宅

前夜祭

@hotwatermorning先生が前入りして某社を見学するということで到着に合わせて襲撃。そのまま@akineko先生,@decimalbloat先生,@fadis_先生,@aizen76先生、@kyubuns先生と一緒に深夜まで騒いでました。

本編

背景その他

「ネタの指定があれば喋ります」といって参加表明してたら「GCCでなんか」というよくわからない指定をされたので、だいぶ苦し紛れにWindows+GCC(=Mingw)でSEHを使ってみるというネタを絞り出しました。 当初は50分喋らないといけない予定だったのが、どうにもボリューム増えなくて30分に縮めてもらったのが、スケジュールの遅延を相殺して結果的にはまあよかったのかなと。 ただ、絞り出せないとはいっても、一応前日までに一通り資料は完成して一回流して喋ってもいるので、やれるだけのことはちゃんとやってあるつもりです。

Boost.勉強会は割と人数が多くて聴衆のレベルを想定するのが難しいので、技術背景をどこまで説明するかがいつも悩みどころです。 今回はまあx86アセンブリくらいなら雰囲気で読めるだろうと思っていたら、アセンブリが出てきた瞬間に諦めた人も何人かいたようで、もう少し補足説明するべきだったかなと。 ただ、解らん時は「説明してくれ」ってその場で言ってもらえば最低限の解説はすぐに出来るので、あとでブログで「ついていけなかったです」とか言ってないでちゃんと質問してほしいです。

内容

Operaで大量に開いていたタブはほとんどが今回のネタのリソースです。(覚えてたら)後でまとめてURI出します。
発表資料はこのへん
終了後、「Cygwinではどうなるの」と質問されましたが、Cygwinも同じやり方で動くはずです。ただし、cygwin1.dllはSEHをトラップしてSIGNALに変換しているので、その辺の挙動はだいぶ怪しくなると思います。
発表中質問のあった_set_se_translatorについては、これは単に常に一番先端の例外ハンドラからebp切り替えてthrowすればいいだけなので非常に簡単です。
ダブルフォルト等の備えに関しては、巻き戻し先探索中はシステムの例外ハンドラが[fs:0]に登録されているのでそっちでトラップされます。巻き戻し中は自分でどうにかしないといけないですが、単にabort()しても全く追跡できないのでどうすべきかはよくわかりません。
実装自体は一応それなりに動くはずですが、コーナーケースをつついたテストは出来ていないのと、DLLを通過させるとどうなるかもテストできていないので、まだネタの域を出ていません。本気で使いたい奇特な人が居たら連絡ください。
C++は黒魔術の無い素敵な言語です。

参考文献

発表時に開いていたページを列挙しただけ。

懇親会

戦果:

  • めるぽんに少しだけ野菜を食わせた
  • めるぽんに少しだけ野菜を食わせた
  • めるぽんに少しだけ野菜を食わせた

新見観光

鍾乳洞(井倉洞、満奇洞)
  • 大都会の大自然やばい
  • でもなんか寂れてる
  • 探検料高い…
猪風来美術館
  • 満奇洞-方谷駅-美術館の道が狭くて死ぬかと思った(ペーパードライバーです)
  • !!!芸術だぞ!!!
  • 穴窯が思ったよりずっとでかい
  • 土器であんなに精巧な細工ができるとは思ってなかった
  • うまい肉いっぱい食わせて頂きました

発表翌日のバタバタの中準備対応していただいた@bolero_MURAKAMI先生、正体不明の集団に快く応対してくださった猪風来先生と奥様、ありがとうございました。

-

C++は黒魔術の無い素敵な言語です。