Flashの解析はそこまで深くできる訳ではないのですが、オープンリダイレクタ見つけられるくらいの解析はできるようになったので、手順のメモをここに書いておきます。
1. Flashデコンパイラのインストール
Flashの解析に必要なFlashデコンパイラ JPEXS Free Flash Decompilerを下記よりダウンロードしてインストールhttp://www.free-decompiler.com/flash/
(要JRE 1.7以上)
※デスクトップのショートカット、もしくはインストールフォルダのffdec.exeを起動して
>Error: Could not create the Java Virtual Machine.
とか出て起動しない場合、インストールフォルダのffdec.batから起動すると起動できる
※Flashのswfを解析することができるデコンパイラは他にもあるが(flareとか)、筆者があまり使ったことがないので省略。
2.検査対象swfを入手してJPEXS Free Flash Decompilerにドラッグドロップ
swfが解析され、script/の下に抽出されたActionScriptがソースごとに表示される3.FlashVarsを利用している箇所の処理を見る
adobeの公式ヘルプページhttp://helpx.adobe.com/jp/flash/kb/228618.html
ここに書いてあるサンプルコード
<param name="movie" value="myFlashMovie.swf" />
<param name=FlashVars value="myVariable=Hello%20World&mySecondVariable=Goodbye" />
外部から値を受け取るswfの場合、解析したswfのActionScriptのどこかに
var temp:String = loaderInfo.parameters["<FlashVars変数名>"];
のような形でHTMLで指定したパラメータの値がActionScript内で利用されている箇所があるはずなので、デコンパイラで抽出したソース上でパラメータ名を検索して見つけ出す。※loaderInfo.parametersを参照する書き方はこれ以外にもあるが、要はFlashVarsの変数名で検索してどう使われるか追っかければ良い。(JPEXS Free Flash Decompilerの場合、検索はTools->TextSearch。ctrl + fで出てくる検索メニューは別物なので注意)
Flashは、HTML上のタグだけではなく、GETパラメータとして渡された値もFlashVarsとして受け取ってしまうため、swfにパラメータをつけてコールする形にすれば任意のFlashVarsを渡してFlashを動作させることができてしまう。
そのため、例えば、外部から渡された値がノーチェックで
navigateToURL(new URLRequest(<FlashVars由来の値>));
こんな感じで使われていたら、navigateToURLは指定したURLに遷移する関数なので、そこに外部から任意のURLを指定することができるため、オープンリダイレクタ脆弱性を見つけたことになる。上の例でいくと
http://..../myFlashMovie.swf?<FlashVars変数名>=http://evilsite.test.attack.xx
みたいな形でコールすれば、navigateToURL関数に怪しいURL(http://evilsite.test.attack.xx)を渡して遷移させることができてしまう。その他、オープンリダイレクタ以外のいろいろな攻撃方法・見るべきポイントについてはmala氏の下記の記事に情報が載っている。
Flash Based XSSについて その2 解析と発見と修正方法(金利0無利息キャッシング – キャッシングできます)
http://subtech.g.hatena.ne.jp/mala/20130604/1370328780
Flashからjsを呼び出すために使う ExtarnalInterface.call() 関数の脆弱性に関してはMasato Kinugawa氏の下記スライドもすごく参考になる。
見つけた脆弱性について(cybozu.com Security Challenge)
http://www.slideshare.net/masatokinugawa/cybozu-security-challenge