サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
都知事選
d.hatena.ne.jp/kenjiaiko
はじめてslideshare使ってみた
マイナーかもしれないけど、HTTP Request Smuggling(通称HRS)という攻撃手法があります。詳しくはWizardBible vol.19の金床氏のHRS記事を参照。そして、それに関連して、IIS/5.0の48kbバグ(仕様?)というものがありまして、簡単に言うと、IIS/5.0は、Content-Typeヘッダが無い48kb以上のボディ部を持つHTTPリクエストに対して、無条件にボディ部を48kbに決めつけるというものです(以下、WizardBible vol.19のHRS記事から引用)。 IIS/5.0にはとてもわけのわからないバグがあるようで、48kb以上のボディ部を持ち、かつContent-Typeヘッダーフィールドが無いHTTPリクエストは、無条件にボディ部を48kbちょうどと決めつけてしまうようです。 ちなみにIIS/5.1も5.0同様48kb決めうちを行います
JavaScriptのXMLHttpRequestでのクロスドメイン制限を回避できるなら、iアプリはどうなんだろう? ということで試してみた。ちなみにDocomoのiアプリは「制限したHTTP通信」をサポートしており、一応HTTPが扱えるが、携帯電話にダウンロードされたiアプリは、ダウンロード元のサーバへしかHTTP通信できない、また、HTTP以外の通信をサポートしない、という制限がある。 参考:Doja HttpConnection 「ダウンロード元のサーバへしかHTTP通信できない」という点においてJavaScript(Ajax?)と似ている。結果から言うと、iアプリもDNS Rebindingでダウンロード元以外のサーバへアクセス可能だと判明。 mydomain.comのIPアドレスを1.2.3.4にセット(1.2.3.4は自分が管理するサーバ) mydomain.com(1.2.3
iモードブラウザ2.0でJavaScriptが本格的に有効になったので、XMLHttpRequestを使ってサーバと通信可能になった(2009年8月辺り?) DNS RebindingでJavaScriptのクロスドメイン制限が突破可能だと判明(2009年11月) iモード専用サイトのhtmlソースの閲覧方法 iモードIDはguid=ONをURLの末尾につけることでサーバへ転送されるため、iモードIDで「かんたんログイン」していると「なりすまし」の可能性あり(2010年2月) iモードIDを用いた「かんたんログイン」のDNS Rebinding脆弱性 [対策1] DNS RebindingするとHTTPリクエストのHostが本来のホスト名にならないため、バーチャルホストで運用すればOK [対策2] そもそもCGI側でHostを確認して、自ホスト以外なら弾くコードを追加すればOK?
http://d.hatena.ne.jp/rootkit/20080818/1219042285 ベスト71〜80に説明つけてみた(間違いあるかも…) 22341 ds セグメントオーバーライドプリフィックス(データセグメント) 21736 jp PF=1 PFが1ならジャンプ(JPEとも書く) 21175 fnstsw FSTフラグをオペランドへ転送(FSTSWとも書く) 20458 not 1の補数、要するにビット反転命令 19998 cs セグメントオーバーライドプリフィックス(コードセグメント) 19554 fild 符号付き整数を浮動小数点数に変換しst0へ格納 18972 lock 割り込み禁止に設定 18866 sete ZFフラグの値をオペランドへ格納 18297 setne ZFフラグと逆の値をオペランドへ格納 18055 lods メモリの内容をEAXに読み込みESI
http://d.hatena.ne.jp/rootkit/20080818/1219042285 ベスト61〜70に説明つけてみた(間違いあるかも…) 37928 repz repと同じだが、次の命令が転送命令ならrepを比較命令ならrepzを使うのが一般的らしい 36217 out 外部デバイスの入出力ポートへデータを送る(outsのパワーダウン版?) 34432 cdq EAXレジスタを符号付き整数としてEDX:EAXに型変換する 33914 movsx 基本的に16ビット版mov(メモリ上の16ビット以下のデータを転送する) 30026 pusha 全レジスタの値をスタックへ格納する 28262 fadd 浮動小数点演算での足し算(st0と渡されたオペランドが足される) 27495 rol 左方向へのローテート(CFは含まれない) 24020 aas アンパックBCDの減算結果AL
http://d.hatena.ne.jp/rootkit/20080818/1219042285 ベスト51〜60に説明つけてみた(間違いあるかも…) 62273 stos EAXの値をES:EDIの指すメモリへ格納する(REPと組み合わせることで初期化処理になる) 60421 jns SF=0 マイナスじゃないならジャンプ 58573 movq MMXレジスタで使われるmovで64ビット転送に使用する(最適化とかそういう話) 58422 fmul 浮動小数点演算での掛け算(st0と渡されたオペランドが掛けられる) 53800 jg ZF=0 && SF=OF 符号ありで、大きいならジャンプ 50155 movaps XMMレジスタで使われるmovで128ビット転送に使用する(これも最適化とかそういう話) 45608 sar 符号ありで右シフト(シフト系は符号のありなしで少し複雑) 45
http://d.hatena.ne.jp/rootkit/20080818/1219042285 ベスト41〜50に説明つけてみた(間違いあるかも…) 113117 jo OF=1 オーバーフローしたらジャンプ 111416 jle ZF=1 or SF!=OF (符号あり)以下ならジャンプ 111125 shl 左方向にシフト(C言語でいう << ←これ) 104434 fstp st0レジスタからデータを取得(浮動小数点系の演算でよく使われる) 103882 rep ECXが0になるまで次の命令を繰り返す(比較命令時はZFフラグも見る) 91023 xchg 2つのオペランドを交換する(xchg eax, ebxでeaxとebxの値が交換される) 74925 addr16 ? 72425 fs ? 71879 neg 2の補数値にする(符号ありの値に対して、符号を反転させる) 631
http://d.hatena.ne.jp/rootkit/20080818/1219042285 ベスト21〜40に説明つけてみた(間違いあるかも…) 416677 outs 外部デバイスの入出力ポートへデータを送る(repと組み合わせて使おう) 393871 jb CF=1 符号なしで、小さいならジャンプ 362616 (bad) 解析できなかった命令? 311007 imul 符号ありの乗算(掛け算)EAXと渡された値を掛けてEDX:EAXへ入れる 295376 ins 外部デバイスの入出力ポートからデータを受け取る(repと組み合わせて使おう) 290626 jl SF!=OF 符号あり(マイナスの数値あり)で、小さいならジャンプ 249056 jae CF=0 符号なし(0が最小値)で、以上ならジャンプ 220561 leave retの前に置かれるもの("mov esp, eb
せっかく32ビット素数表を作ったので、factorコマンドに素因数分解勝負を挑んでみた。ちなみに、factorコマンドとは、Linuxに標準でついている素因数分解プログラムです。Linuxに標準でついてるくらいなので、多分アルゴリズム的にかなり速い素因数分解ができる(ハズだと思います)。 # time factor 18446744073709551615 18446744073709551615: 3 5 17 257 641 65537 6700417 real 0m0.001s user 0m0.000s sys 0m0.000s # こんな風に、64ビット最大値の18446744073709551615を、わずか0.001秒で素因数分解します。ただし、素数の値が大きくなると、低速になります。 # time factor 18446744073709551609 1844674407
http://www.nicovideo.jp/watch/sm3944175 名言の解釈パターンが様々だったので調べてみた。あと、言葉にはこういうあいまいさがあるから翻訳をプログラミングできないんだろうなぁと人間の脳のすごさを改めて実感してみたり。 善意を持つのはいいが、行動(善行)しなければ結局は何も変わらないぞ(地獄行きだぞ)、という「行動が重要」という解釈 悪い奴らはいつだって笑顔で(善意であるかのように)お前に近寄ってくるぞ、という「うまい話には裏がある」という解釈 良かれと思ってやっていることも、結果的に相手にとって悪いことになったりもするぞ、という「意図と結果が異なることもあるぞ」という解釈 自分がどんなに不幸だと感じても、それに至るまでには数多くの人の助けがあったはずだ、という「結局は誰でもない自分の責任だ」という解釈 解釈の答えは誰でもないキミの心の中にある、という「それ
ATDE:http://armadillo.atmark-techno.com/downloads ATDEはArmadilloシリーズの開発環境を提供するVMware仮想マシンのデータイメージです。イメージはLinuxデスクトップ環境をベースにGNUクロス開発ツールやその他の必要なツールが事前にインストールされています。 とのこと。 ダウンロードサイズは600MB程度、展開後は6GB近くなる。ユーザー:atmark、パスワード:atmarkでログイン可能。rootのパスワードはそのままrootでおk。このlinux環境の中にARM用のコンパイラが入っていますので、まずはそれでコンパイル。 $ cat > test.c #include <stdio.h> int main(void) { printf("Hello ARM\n"); return 0; } ^C(Ctrl+C) $ ar
http://kenjinet.s26.xrea.com/syssys.txt ↑NTDLL.DLLを抜けるまで呼び出し履歴を追ってみたもの。基本的にKERNEL32.DLLとかADVAPI32.DLLとかまで追うけど、関数呼び出しを再帰させてたりすると、最後まで追いきれないので、NTDLL.DLLでストップさせる場合アリ。 これでSYSENTERフックしたときに、どのAPIが呼び出されてSYSENTERまで来たのかが、なんとなくわかるw。でもあくまでなんとなくなので…、というか、予想以上に多種多様なAPI関数から呼ばれてて笑ってしまった。 とりあえず「実践投入できるかどうか?」が自分的に結構ポイントなのですが、これだと微妙だw。というわけで、さらなるアイディアを考え中。
OllyDbg Windowsで普通のアプリを動的解析したい! Stirling バイナリを直接編集したい! BZエディタ GB(ギガバイト)レベルのファイルのバイナリも楽に編集したい! IDAPro Free版 Windowsで静的解析がしたい! IDAPro Demo版 x86以外のCPUも解析したい!(ARMとか) WinDbg Windowsのカーネルみたり、ダンプファイルみたりしたい! もちろん普通のデバッガとしても使いたい。 jad javaのクラスファイルを逆コンパイルしたい! Reflector .NETの実行ファイルを逆コンパイルしたい! Flashデコンパイラ集 Flashを逆コンパイルしたい! radare 安定してないけどppcとかも解析したい! あとshellcodeも書きたい! nasm 64ビットも読みたい! あとは環境に合わせて…、例えばUNIX系ならgdb
Stoned Bootkit 2005年辺りに話題になったBootkitの進化版? OSの前に起動しハードウェアI/Oのint13hをフックして、TrueCryptを無効化するrootkit。研究内容としてはRing-3が面白かったけど、実用性ではこっちに軍配が上がる。 Sniff keystrokes with Lasers/Voltmeters ハードウェア系のキーロガーの話。レーザーやオシロスコープ(?)などを用いて、外からPS/2キーボードのログをキャプチャできないか? という感じの話(たぶん)。マシンによってノイズの量が異なり、EeePCは結構クリアでとりやすく、MacBookはノイズが多いとのこと。それにしても、こんなことを研究してた人がいたのか…。 Our Favorite XSS Filters and How to Attach Them スタンダードなものからマニアック
http://d.hatena.ne.jp/rootkit/20080818/1219042285 とりあえずベスト20に説明つけてみた 11378610 mov レジスタ値やメモリの値を転送 9156176 push スタックへ値を格納 3825704 add 値を加算(足し算) 3638244 call スタックに次の実行命令のアドレスを入れてジャンプ 2329166 int3 デバッグ用割り込み 2271495 pop スタックから値を取り出す 2105874 cmp 値を評価してフラグに反映 2000442 je ZF=1 同じならジャンプ 1920361 lea 説明しにくい。まぁ[]の中の計算結果がレジスタへ入ると覚えておけばおk 1673045 nop 何もしない 1495072 test フラグだけ変化するAND命令(真 or 偽 だけを判断する時によく使う) 142658
UbuntuのVMイメージ http://www.ubuntulinux.jp/products/GetUbuntu UbuntuのVMイメージをDL 初期設定(初回起動時の時間設定やユーザー作成など)を終える 適当な場所に適当な名前でディレクトリ作成 ディレクトリの中にMakefileとソースファイル作成 コンパイル(ビルド?)*1 .koファイルの出来上がり insmodでカーネルモジュールをロード rmmodでカーネルモジュールをアンロード dmesgで出力ログを確認 $ pwd /home/kenji/hello $ mkdir hello $ ls Examples テンプレート ドキュメント 音楽 公開 hello デスクトップ ビデオ 画像 $ cd hello $ cat >Makefile obj-m += hello.o $ cat >hello.c #include
現在自分が持っているマシンでもっともスペックが高いものがCore2Duo2.4のMacBookだったりするため、必然的にMacOSXを使う機会が多くなるので、最大限MacBookをメインマシンとして使えるように努力してみた。ちなみに別にMacOSXに心変わりしたわけではない。Windowsも変わらず大好きですよ。 1、まず買ったばかりのMacBookにはgccをはじめとした開発環境がデフォルトでインストールされていないので、付属のDVDから開発環境全般をインストール。エンジニアとしては、開発環境ついてないならWindowsと変わらない…。 2、次にVM(VirtualBox2)をインストール。個人的に他環境を使えることは必須なのでVMは必需品。VirtualBox2からMac版もブリッジ接続に対応したので、ゲストがホストと同じネットワークでいろいろ出来ます(ホストからゲストに対してsshで
まっちゃ445でも話題にあがったclickjacking。 ブラウザに透明なフレームを貼付けて、ユーザーに意図しないリンクをクリックさせる攻撃方法 http://www.planb-security.net/notclickjacking/iframetrick.html ソースコードは↓こんな感じ <html> <title>Real Clickjacking?</title> <head> <style> span.fakebutton_1{background-color:red;font-weight:bold;font-size:12px; position:absolute;top:463px;left:365px;z-index:-10} span.fakebutton_2{background-color:orange;font-weight:bold;font-size:
ローレイヤー勉強会 第一回 http://www4.big.or.jp/~kanai/MT/archives/000846.html 感想ではなく実況なのでいろいろと雑です。 雰囲気を味わってもらえれば幸いです。 一発目は村上氏のプレゼンで、Linuxカーネルのシステムコールをフックする内容です。例えばwrite関数を呼び出すと、内部でint 80hが呼ばれてカーネルへ処理が移るが、そのときカーネル内でどのような処理が行われるかを説明されてます(開始20分)。 システムコールをフックするためには、どこを書き換える必要があるか? カーネル内にはテーブルが2つあります。IDTを書き換えるか? sys_call_tableを書き換えるか? またカーネルにはどうやってアクセスするか? とりあえずLKM(デバイスドライバ)を書きましょう。もちろん各種カーネルモジュールを使っても大丈夫。また/dev/
第03回まっちゃ445勉強会↓を現在進行形で実況してます http://sites.google.com/site/matcha445/saturday-workshop/3rd-workshop-2 感想ではなく実況なのでいろいろと雑です。 雰囲気を味わってもらえれば幸いです。 13時00分開始。参加者は60名〜80名ほどいらっしゃいます。会場いっぱいです。まず、開会の挨拶+スタッフの自己紹介です(開始22分)。続いて参加者の自己紹介です(開始28分)。 自己紹介終了。休憩後、セキュアOSのセッション開始です(開始55分)。 「セキュアOSが進化した歴史を振り返って来年はチャレンジしよう」が始まりました(開始67分)。 Linuxをインストールするときは、大抵はSELinuxの設定をどうするか聞かれます。2003年ごろはアンチクラッキング機能として宣伝されており、万が一の被害を受けても影
1、FreeBSDでsuしても「Sorry」とか言われてrootになれない…orz /etc/groupファイルを変更し、su実行ユーザーを追加 # $FreeBSD: src/etc/group,v 1.35 2007/06/11 18:36:39 ceri Exp $ # wheel:*:0:root,kenji(←suを許可するユーザーkenjiを追加する) daemon:*:1: … 2、ネットワーク設定ファイルが分からない…orz FreeBSDなら/etc/rc.confを変更、Linuxなら/etc/network/interfacesを変更 名前解決はどちらも/etc/resolv.confを変更 3、好きなアプリケーションをインストールできない…orz Linuxならapt-get # apt-get update # apt-cache search httpd # a
http://d.hatena.ne.jp/rootkit/20080818/1219042285 ベスト50位の中から、最低限これだけ覚えておけばきっと解析できる命令をまとめてみた。 関数呼び出しやEIP変更関連の命令 push スタックへ値を格納 pop スタックから値を取り出す call スタックに次の実行命令のアドレスを入れてジャンプ leave retの前に置かれるもの("mov esp, ebp"+"pop ebp"と同じ) ret スタックのトップにある値を取り出してそこへジャンプ jmp 指定アドレスへジャンプ 値の操作系の命令 mov レジスタ値やメモリの値を転送 movzx 渡したレジスタ値やメモリ値のサイズが異っても転送可能なmov lea 説明しにくい。まぁ[]の中の計算結果がレジスタへ入ると覚えておけばおk xchg 2つのオペランドを交換する(xchg eax,
ntdll.dllはシステムディレクトリに格納されており、WFP(Windows File Protection)で守られているわけですが、これを、sfc_os.dllがエクスポートしている、エクスポート序数が「5」の関数とか、sfc.dllのエクスポート序数「2」の関数を使うことで、WFPを無効にして、ntdll.dllを書き換えられます。 しかし、ntdll.dllはWindowsシステム上例外的に重要なDLLで、ntdll.dllを強引に書き換えてWindowsを再起動すると、ブルースクリーンにエラーが表示され、2度とWindowsが起動しなくなります。 STOP: c0000221 Unknown Hard Error \SystemRoot\System32\ntdll.dll ntdll.dllを好きなように書き換えただけなのに、二度とWindowsが起動できなくなるなんてヒド
一週間ほどラスベガスに行っていましたが、日本時間2008年/08月/12日の18時ちょうどに、無事家に帰り着きました。初めてのUSA、初めてのラスベガス、初めてのBlack Hat USAでしたが、本当に夢のような日々でした。もしかしたら、これまでの僕の人生でもっとも楽しかった時間だったかもしれません。 僕は日本で開催されたBlack Hat Japanにも参加した経験があるのですが、Black Hat USAはその10倍以上の規模があり、プレゼンの内容も多岐に渡ります。やはり、本場のUSAだけあって、セキュリティに関心のある人が多いのかもしれません。さらに特徴的なのが、USAではバイナリ解析やリバースエンジニアリング、カーネル Hackingなどがメジャーで、Webアプリ系の脆弱性解析が日本ほど主流ではありません。僕はバイナリ系の人間なので最高に楽しい日々でしたが、日本のWeb系のエンジ
Vistaはデフォルトで、TrustedInstallerというサービスプロセスが起動している。起動しているといっても、OS起動時は「停止」状態なので、動いてはいないわけだが、sfcコマンドを実行すると、TrustedInstallerサービスが動き出し、ファイルを復元してくれたり、ファイルの整合性をチェックしてくれたりする。 サービスプロセスは「Windowsタスクマネージャ」を起動して、「サービス」というタブをクリックすると確認できる。このタブから、サービスの制御(開始と停止)ができるのだが、タスクマネージャを普通に起動すると、Administrator権限がないため、サービスの制御ができない。よって、サービスを制御するためには、タスクマネージャを管理者で起動する必要がある。というか、個人的にUAC(ユーザーアカウント制御)は、場合によって(デバッガを使う場合など)、邪魔になることがあ
「Black Hat Japan 2008 Briefings」発表資料(CFP)の募集↓(締切:9月1日) http://www.blackhat.com/html/bh-japan-08/bh-jp-08-cfp-terms.html 2007年は、金床さんという日本人の方がスピーカーとして発表されました。彼はその日のNHKニュースでも取り上げられ、「今そこにある現実的な脅威」が大きくクローズアップされました。 2007年の日本人スピーカーは彼だけでしたが、日本人で優秀なセキュリティエンジニアはまだまだたくさんいると思うので、もし何かネタを持っていれば、どんどん応募した方がよいと思います。それにスピーカーとして参加すれば、参加費も無料ですし、世界各地の優秀なセキュリティエンジニアと情報をやり取りすることもでき、まさに一石二鳥です(さらに東京に住んでいなくとも、スピーカーならばホテルとか
たまたま、Core 2 Duo 3.00GHzという高速なマシンを利用する機会があったので、4294967296までの素数を列挙するのにどのくらいの時間がかかるかなぁと思い、以下のプログラムを用意した。 // ss.c #include <stdio.h> #include <stdlib.h> unsigned short * make(int *size) { static unsigned short *s16; char *jg; int i, j, n = 65536; if((jg = (char *)malloc(sizeof(char) * n)) == NULL) goto _ERR1; for(i=0; i < n; i++) jg[i] = 1; for(i=2; (i*i) < n; i++) if(jg[i] == 1) for(j = (i << 1); j <
Javaアプリケーションの解析をやっていて、やはりJavaバイトコードの知識は必須だと思いました。確かに、jadをはじめ、Javaデコンパイラの性能は良く、ほぼ間違いなくデコンパイルは成功するのですが、問題は、デコンパイルが完了しても「JVM INSTR」(認識できなかったバイトコードが見つかった場合に出力される)が結構頻繁に現れることと、再度コンパイルするために必要となるファイルを、別途用意しなければならない場合が多々あることです。どちらの場合においても、デコンパイルにより出力されたデータに修正、もしくは追加を行う必要があり、また、バイナリにほんの少しの修正を加えたいだけであっても、デコンパイル → 修正 → コンパイルという動作を行わなければならないため、かなりの手間となります。 例えば、「Doorman」というツールがあります。このツールは、HTTPのProxyとして動作し、通信デー
次のページ
このページを最初にブックマークしてみませんか?
『KENJI’S BLOG』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く