2016-01-01から1年間の記事一覧

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で解くことがで…