angrでシンボリック実行をやってみる

シンボリック実行とは、プログラム上の変数をシンボルとして扱い、シンボルに対する一連の操作を分析することで条件を満たす入力値を特定するプログラム解析手法である。 ここでは、CTFチームShellphishが開発しているバイナリ解析ツールangrを使い、簡単な…

DLL injectionでWindows APIによる暗号化処理を覗いてみる

「LD_PRELOAD injectionでOpenSSLによる暗号化処理を覗いてみる」では、Linux環境におけるOpenSSLを使った暗号化処理を覗いてみた。 ここでは、「IAT書き換えによるAPIフックをやってみる」と同様の方法にて、Windows環境におけるWindows APIを使った暗号化…

LD_PRELOAD injectionでOpenSSLによる暗号化処理を覗いてみる

LD_PRELOAD環境変数を使ったライブラリ関数フックにより、OpenSSLの暗号化処理を覗くコードを書いてみる。 環境 Ubuntu 14.04.4 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x…

Intel Pinでlivestringsを作ってみる

「Intel Pinでcmptraceを作ってみる」では、x86/x64用のDBIツールであるIntel Pinを使ってcmp命令のトレースを行うコードを書いた。 ここでは、同様にIntel Pinを使い、メモリ上に展開されているASCII文字列を列挙するlivestringsを作ってみる。 環境 Ubuntu…

Intel Pinでcmptraceを作ってみる

「Intel Pinを使ってみる」では、Intel Pinをダウンロードし、付属しているコードを使ってみた。 ここでは、実際にコードを書き、cmp命令のトレースを行うコードcmptraceを作ってみる。 環境 Ubuntu 14.04.4 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.…

Intel Pinを使ってみる

Dynamic Binary Instrumentation(DBI)は実行時にバイナリの内容を書き換えることにより、CPU命令の単位でプログラム実行のトレースなどを行う手法である。 ここでは、x86/x64用のDBIツールであるIntel Pinを使ってみる。 環境 Ubuntu 14.04.4 LTS 64bit版 …

64 bitのUbuntu Linuxで32 bitの実行ファイルを動かす方法のメモ

環境 Ubuntu 14.04.4 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Descrip…

Mersenne Twisterの出力を推測してみる

「Z3Pyでglibc rand(3)の出力を推測してみる」および「Z3Pyでxorshift128+の出力を推測してみる」では、Z3Pyを使って疑似乱数生成アルゴリズムのいくつかの出力を観測することで、後続の出力を推測した。 ここでは、Pythonのrandomモジュールなどで利用され…

Z3Pyでxorshift128+の出力を推測してみる

「Z3Pyでglibc rand(3)の出力を推測してみる」では、glibc rand(3)の出力をいくつか観測することで、後続の出力を推測した。 ここでは、V8 JavaScript Engineなどで使われている疑似乱数生成アルゴリズムxorshift128+の出力を推測してみる。 環境 Ubuntu 14.…

Z3Pyでglibc rand(3)の出力を推測してみる

疑似乱数列は、いくつかの出力を観測することにより内部状態を復元することで推測が可能である。 ここでは、SMTソルバZ3Pyを使い、glibc rand(3)の出力を推測してみる。 環境 Ubuntu 14.04.3 LTS 64bit版、EGLIBC 2.19 $ uname -a Linux vm-ubuntu64 3.19.0-…

ArachniでWeb脆弱性スキャンをやってみる

Web

「w3afでWeb脆弱性スキャンをやってみる」では、w3afを使ってWeb脆弱性のスキャンを行った。 Web脆弱性のスキャンツールには、w3afの他にArachniがある。 ArachniはヘッドレスブラウザPhantomJSを利用しており、高精度な脆弱性テストを行うことができる。 こ…

w3afでWeb脆弱性スキャンをやってみる

Web

「sqlmapを使ってみる」では、sqlmapを使ってSQL injection脆弱性のスキャンを行った。 ここでは、SQL injection以外の脆弱性もスキャンできるテストツールw3afを使い、Web脆弱性のスキャンをやってみる。 環境 Ubuntu 14.04.3 LTS 64bit版、Docker 1.9.1 $ …

PythonでPEM形式のRSA鍵を生成する方法のメモ

適当なパラメータをもとに、PythonでPEM形式のRSA鍵を生成する方法のメモ。 環境 Ubuntu 14.04.3 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_…

テキストエディタAtomを使ってみる

メモ帳の代わりに使えるWindowsでのエディタとしてAtomを使い始めた。 Tree Viewとタブ表示、Markdown Preview(Ctrl+Shift+M)が便利。 日本語フォントを設定する デフォルトでは日本語フォントがうまく表示されないので、「File」→「Open Your Stylesheet…

sqlmapを使ってみる

Web

SQL injectionのテストツールであるsqlmapを使ってみる。 環境 Ubuntu 14.04.3 LTS 64bit版、Docker 1.9.1 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_rel…

RSAに対する適応的選択暗号文攻撃とパディング方式

「plain RSAに対する攻撃手法を実装してみる」では、平文をそのまま暗号化した場合のRSA(plain RSA)に対するいくつかの攻撃手法を実装した。 他にも、plain RSAについては適応的選択暗号文攻撃(CCA2)に対して安全でないことが知られている。 ここでは、p…

SageMathを使ってCoppersmith's Attackをやってみる

「plain RSAに対する攻撃手法を実装してみる」では、plain RSAに対する種々の攻撃手法を実装した。 plain RSAに対する攻撃手法には、他にもCoppersmithの定理に関連した手法が知られている。 ここでは、Pythonベースの数式処理システムSageMathを用いてこれ…

plain RSAに対する攻撃手法を実装してみる

RSAは「単純な素因数分解アルゴリズムを実装してみる」「Msieveを使って大きな数を素因数分解してみる」「YAFUを使って大きな数を素因数分解してみる」で示したような方法により、公開鍵nを素因数分解することができれば秘密鍵dを得ることができる。 一方、…

YAFUを使って大きな数を素因数分解してみる

「Msieveを使って大きな数を素因数分解してみる」では、Msieveを使って大きな数の素因数分解を行った。 素因数分解プログラムには、Msieveの他にYAFU(Yet Another Factorization Utility)がある。 YAFUはECMにGMP-ECM、MPQSにMsieve、GNFSにGGNFSを用い、…

Msieveを使って大きな数を素因数分解してみる

「単純な素因数分解アルゴリズムを実装してみる」では、実装の容易な素因数分解アルゴリズムをPythonで実装し、一般的なPCで解くことができるbit数などを調べた。 より大きな数を素因数分解できるアルゴリズムには、楕円曲線法(ECM)、複数多項式二次ふるい…

単純な素因数分解アルゴリズムを実装してみる

「OpenSSLとPythonでRSA暗号の原理を知る」で書いたように、RSA暗号は公開鍵である整数modulusを二つの素数に素因数分解することができれば破ることができる。 ここでは、いくつかの単純な素因数分解アルゴリズムをPythonで実装し、一般的なPCで解くことがで…

GRUBで簡単なOSカーネルを動かしてみる

「x86 bootloaderから簡単なOSカーネルを動かしてみる」では、bootloaderを作った上で簡単なOSカーネルを動かした。 ここでは、GRUBをbootloaderとして利用してOSカーネルを動かしてみる。 環境 Ubuntu 14.04.3 LTS 64bit版、QEMU 2.0.0 $ uname -a Linux vm…

GNU Emacs入門

Emacsの使い方についてまとめてみる。 CtrlとCapsLockの位置を入れ替える EmacsはCtrlキーの同時押しを頻繁に行うため、左Ctrlと左CapsLockの位置を入れ替えておくとよい。 Windowsであれば、Sysinternals Ctrl2capやChange Keyが使える。 インストール ここ…

JIT-ROP緩和手法Heisenbyteについてまとめてみる

この記事は「情報セキュリティ系論文紹介 Advent Calendar 2015」24日目の記事です。 JIT-ROP緩和手法として発表されたHeisenbyteについてまとめてみる。 Heisenbyte: Thwarting Memory Disclosure Attacks using Destructive Code Reads (ACM CCS 2015) tl;…

CBC modeに対するPadding oracle attackをやってみる

この記事は「脆弱性"&'<<>\ Advent Calendar 2015」23日目の記事です。 ブロック暗号モードのひとつであるCBC modeには、Padding oracle attackと呼ばれる攻撃手法が存在することが知られている。 これは、繰り返し復号を行うことができ、かつ復号の成否が観…

各種アーキテクチャのクロスコンパイラ環境を構築する

Docker上に作成したDebian 8環境にてbinutils、gcc、glibcをソースコードからビルドし、さまざまなアーキテクチャのクロスコンパイラ環境を構築してみる。 なお、構築した環境は次のDocker imageとして公開してある(イメージサイズが2.8GBと大きいことに注…

脆弱性テスト・学習用Webアプリケーションのメモ

Web

脆弱性スキャンツールのテストあるいは脆弱性内容の学習を目的として、意図的に脆弱性が作り込まれたWebアプリケーションをいろいろ調べた結果のメモ。 Badstore Badstore: 1.2.3 ~ VulnHub Last update: 2004-02-24 (1.2.3) この手のアプリケーションの元祖…

qemu-debootstrapを使ってユーザモードQEMUで動くDockerイメージを作ってみる

「DockerでユーザモードQEMUによるARMエミュレーション環境を構築する」では、mazzolino/armhf-ubuntuというDockerイメージを使ってqemu-user-staticによるARM版Ubuntuのエミュレーション環境を構築した。 ここでは、qemu-debootstrapを使ってARM版DebianのD…

gdbを使っていい感じにプロセスツリーを手元の端末に繋ぎ変えるシェルスクリプト

次のエントリにあるように、gdbを使うとプロセスの標準入出力を別の端末(tty)に繋ぎ変えることができる。 コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ しかし実際にはあるプロセスからサブプロセスが複数呼ばれている状況…

x86/x86-64/ARM/AArch64/PowerPC/PowerPC64のアセンブリコードを読んでみる

簡単なC言語コードを各アーキテクチャ向けにコンパイルした結果のメモを兼ねて、アセンブリコードを読んでみる。 環境 Ubuntu 14.04.2 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86…