ヾノ*>ㅅ<)ノシ帳

ノンジャンルのふりーだむなブログです。

情報科学若手の会冬の陣2019 で登壇しました

2019/01/20(日) に開催された情報科学若手の会冬の陣2019 #wakate2019w に登壇しました。

wakate.connpass.com

情報科学若手の会は、シンポジウムの要領で毎年秋頃に2泊3日の合宿する会のようですが、まだ参加したことがありません。 今回の冬の陣はその非公式出張版のような立ち位置のようです。 話すネタはあり、参加者を見ると話が通じそうな人がちらほらいそうだったので、友利奈緒のコスプレをしつつ登壇してみました。 コスプレをしても会場にいる人達は反応しないのがデフォになってきました。

発表内容は相も変わらずシンボリック実行に関するものです。2018年5月ごろにWeakest Preconditionを用いるシンボリック実行(Symbolic Backward Execution)があることを知り、実装してみたいとは思っていました。 2018年春の Kernel/VM探検隊 に登壇したときに、ntddk先生にBackwardを実装して欲しいみたいな言われ方をしたのも理由の一つです。 表紙のキャラはオリキャラの二木双葉ちゃんです。登壇前日に夜更かしして描きました。

speakerdeck.com

質疑応答&フィードバック:

  • SBEのユースケースは?→特定地点に至るパスの解析が得意なことから、例えばマルウェアのシェルコード解析に役立つと思う。
  • CFGの解析は2018の若手の会でだでぃこさんが言ってたLLVMのやつが良さそう。
  • PythonのSBEのフルサポートが大変そう→オブジェクトなど動的生成が多いものはトラックが大変かも。今回はプログラミング言語に最低限必要なコード(四則演算、代入、関数)をサポートするSBEはエンジンを実装するモチベーションでやってるので、Pythonのフルサポートは求めない。
  • コンパイラに興味があり、Weakest Preconditionの計算により最適化できると嬉しいと思った。

keenさん、質問タイムとそれ以外でたくさんフィードバックありがとうございました。発表した後に個人的に接触してもらえるのは嬉しいです。

冒頭で、写真撮影と公開OK、って言えば良かったです。

SBEの今後の展開として、コンパイル時セキュリティ検査なんてのも面白いかも知れませんね。潜在的なDouble Free脆弱性があるとか。

聴講した感想

その1)やっていき

@mkt_kwnさん(慶応大の博士課程の方)がスマートシティのために一つの市を巻き込んでいたり、ぱろっくくん(セキュキャン2015年の同期)が会社を立ち上げしてたりして、作りたい世界のためにでかいアクションを取っていて刺激を受けました。私も作りたい世界があるのでやっていくしかないですね~(時期が来たらまた話します)。

その2)コスプレはネタTシャツに勝る

その3)サイバーエージェントの人事

@masagotty さん(ゴッティさん)から圧がすごい発表。熱血本がセキュリティ界隈だと有名なのは知っていますが、普通のエンジニアも手にとっていたとは知りませんでした…(私はKindle版を持っています)。

会社が、エンジニアが楽しく働けることをケアしてくれるのは大事なファクターなので、就活中の学生エンジニアの皆さん、ちゃんと見定めてくださいね。(現職はこの前提が成り立って無くて、しんどいよー。)

UnityCamをビルドしようとしたら __imp__snprintf エラーでビルドできなかった

UnityCamをVisual Studioでビルドしようとしたら、

LNK2001 外部シンボル "impvsnwprintf" は未解決です。

というエラーが出た。

以下対処方法。

  1. Visual Studioのソースツリーにある、UnityCamServiceプロジェクトを右クリックして、「プロパティ」をクリック
  2. 「リンカ▶入力」タブを開き、「追加の依存ファイル」欄に「;legacy_stdio_definitions.lib」を追加。

f:id:katc:20180813144314p:plain

なお、ソースツリー内のソリューションを右クリックして現れる「ソリューションの再ターゲット」は済ませてある。

参考資料

第14回カーネル/VM探検隊 で登壇しました

2018年7月21日の午後に第14回カーネルVM探検隊が開催されました。初参加でしたが、思い切って登壇してみました。

kernelvm14.peatix.com

スライドへのリンク込の登壇者リスト:

第14回カーネル/VM探検隊 タイムテーブル

YouTubeアーカイブ配信:

www.youtube.com

登壇

記録的な猛暑で、IIJの建物についた頃には、汗だくでファンデーションが落ちまくりという状況でした。ちゃんとファンデーションを塗り直しましたよ。 汗が引いたらもちろん友利奈緒の格好に変身です。 嬉しいことに着替え用のスペースがあったので広々と着替えることができました。 コスプレをしていたのは私だけではなくて、mysticdoll(みすど)さんとお話しながら着替えました。 トイレの鏡でウィッグを整えていたら、ここは男子トイレだよね?、というお約束の反応をもらえて嬉しかったです。

6月は、シンボリック実行でエクスプロイトを自動化したい!というモチベーションで趣味の研究に取り組んでいたので、その成果報告を兼ねています。 会場のスクリーンの比率が4:3より横広だったので、スライドを16:9で作ればよかったです。

Girls Meets Symbolic Execution: Assertion 2. Automated Exploit Generation - Speaker Deck

speakerdeck.com

察しがつくかと思いますが、実装にかかった時間よりもイラストとスライドの準備にやたら時間がかかっています。まぁ、こっち系の作業の方が好きだったりしますからね。

懇親会

懇親会は神楽坂の「クラフトビアサーバーランド」というお店で開催されました。店内は一人暮らしの縦長の部屋に数十人がひしめいているといった感じでした。カウンターに各自がビールを取りに行くスタイルで、ビールは十何種類から選べました。飲んだ中では長野のHAKUBA なんちゃらベールエールってやつが軽い飲み口で華やかで美味しかったです。メニュー表を撮っておけばよかったです。

f:id:katc:20180721190913j:plain

何としてでもWiresharkのsuriwireプラグインを使いたい!

Arch LinuxWiresharksuriwireプラグインをインストールする話。 suriwireプラグインは、WiresharkでSuricataのEVEログを扱えるようにするためのluaスクリプトである。

Wiresarkでluaスクリプトを置く場所は、メニューバーの [Help] - [About Wireshark] で開くダイアログの [Folders] に示されている。

私の場合は、

cd ~/.local/lib/wireshark/plugins
wget https://raw.githubusercontent.com/regit/suriwire/master/suriwire.lua

プラグインのインストールは完了した。だが、問題はここから。 suriwireはlua-cjsonに依存しており、luarocks(luaのパッケージマネージャー)でインストールされるものだと lua_objlen なるものが undefined symbol となってしまった。

そこで、意図的に古いバージョンをインストールすることによりシンボルエラーを消すことができた。

### すでにlua-cjsonをインストールしてある場合は一旦消す
sudo -H luarocks remove lua-cjson
### ダウングレードしたlua-cjsonをインストール
sudo -H luarocks install lua-cjson 2.0.0
### プラグインフォルダにコピー
cp /usr/lib/lua/5.3/cjson.so .

ターミナルでrequireがうまくいっていることを確認できた。

K_atc% lua5.3 suriwire.lua
lua5.3: suriwire.lua:29: attempt to call a nil value (global 'gui_enabled')
stack traceback:
    suriwire.lua:29: in main chunk
    [C]: in ?

プラグインフォルダをカレントディレクトリとしてWiresharkを起動すると(wireshark-gtk)、 SuriwireプラグインWiresharkに正常に読み込まれ、下図のようにメニューが増えた。

f:id:katc:20180702165920p:plain

strace -f -e openat でトレースしたところ、 cjson.so は /usr/lib/lua/5.2/ に無いといけないっぽい。

sudo cp /usr/lib/lua/5.3/cjson.so /usr/lib/lua/5.2/cjson.so

こんなんでいいのか?luaverを使ってlua 5.2でビルドしてあげたほうがいいかも。この話はここまで。

You may need a patch for Triton when gcc version is 8.1.0

I found that Symbolic Engine Triton can't be compiled with gcc 8.1.0.

github.com

I have to apply a patch below to fix compile error.

diff --git a/src/libtriton/CMakeLists.txt b/src/libtriton/CMakeLists.txt
index 7e644a77..2083d23a 100644
--- a/src/libtriton/CMakeLists.txt
+++ b/src/libtriton/CMakeLists.txt
@@ -21,7 +21,7 @@ endif()
 # Global UNIX CXX Flags
 if(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
     # Flags
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-unused-parameter -Wno-unknown-pragmas -Wno-mismatched-tags")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-error=cast-function-type -Wno-unused-parameter -Wno-unknown-pragmas")
     if(NOT GCOV)
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
     endif()

gcc version:

K_atc% gcc -v 
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/8.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --enable-multilib --disable-werror --enable-checking=release --enable-default-pie --enable-default-ssp
Thread model: posix
gcc version 8.1.0 (GCC) 

Arch Linuxマシンで pacman -Syu したら、ログイン画面が出てこなくなって大変だった

2週間以上経って、今日ようやく直った。くぅ~

構成:

  • Distro: Arch Linux
  • Display Manager: LightDM
  • Window Manager: awesome

症状:

  • 4月上旬に、2週間以上ぶりにpacman -Syu したら LightDMが起動しなくなった
  • Cttl + Alt + F3 で tty3 を開くとCUIのログインプロンプトは出ており、ログインも可能➡Display Managerが死んでいる
  • ~/.xsession-error を見ると、awesomeが libfontconfig.so.1: undefined symbol: FT_Done_MM_Var とエラーを出している

実施した対策:

  • 他のDisplay Managerをインストール→効果なし
    • SDDM→SDDMは起動するが、awesomeが起動せずSDDMがフリーズした
  • LightDMのバージョンを落とす→効果なし
  • harfbuzz, harfbuzz-icu を最新版にアップデート→問題解消
    • Virtual Box が harfbuzzのバージョンを落とさないと起動しないことが過去にあり、古いままになっていた

現在:

  • LightDM + awesome の構成で正常に起動する
  • Virtual Box は正常に動作する