マルウェア Duqu で使われていた「未知の言語」の正体は C だった 25
ストーリー by reo
なるほど未知だ 部門より
なるほど未知だ 部門より
hylom 曰く、
先日、マルウェア「Duqu」が未知の言語で開発されたかもしれないという /.J 記事 があったが、この「未知の言語」は実は C 言語だったことが判明した (Kespersky Lab の Igor SoumenKov 氏によるブログ記事より) 。
200 件以上のコメント、60 件以上のメールで「これは○○という言語ではないか」という声が寄せられたそうだが、アセンブラコードの癖などから、Visual C++ でコンパイルされたものだと分かったという。これに加えカスタムメイドのオブジェクト指向 C 言語フレームワークが使われているものと思われるそうだ。Simple Object Orientation for C (SOO) というものに似ているそうだが、SOO は Duqu がすでに出回ったあとにリリースされたために Duqu で使われている可能性はないとされている。
C++ ではなくこのようなフレームワークが用いられた理由としては「開発者が C++ コンパイラを信用していない」「移植性のため」などが挙げられている。
ご名答 (スコア:5, 参考になる)
誰かこのACさんにすば洞をあげてください。
http://developers.srad.jp/comments.pl?sid=562837&cid=2117607 [srad.jp]
Re:ご名答 (スコア:3, おもしろおかしい)
バッカモーン!そいつがルパンだ!
Re:ご名答 (スコア:1)
いや、奴はとんでもないものを盗んでいきました・・・
・・・ あなたのコードです
Re: (スコア:0)
なぜかタライが降ってくるシーン [amazon.co.jp]を想像した
Re: (スコア:0)
おお、これは凄いね
STLがどうたらこうたらって (スコア:0)
言ってなかった?
# 関心はあるが、追ってはない。のんき。
Re: (スコア:0)
環境に応じて自由自在に攻撃コードを合成したいような場合、
「軽量言語 + 動的コンパイラ + Cの関数テーブル」
あたりがいちばん快適なのかもしれませんね。
アドレスやスタックを生でいじれるC言語を選択したのも、
メソッドがvtblでなくてインスタンス直持ちというのも、
内幕は単にハッカーくさい執念の帰結だったかも。
Re: (スコア:0)
THE REAL PROGRAMMER AT WORK
「本物のプログラマの仕事」 [genpaku.org]
---------------------------
典型的な本物のプログラマは、どこで働いているのだろうか?
これほど有能な人物が努力してなすに値するプログラムとは、一体どんなものだろうか?
本物のプログラマの誰一人としてCOBOLで会計プログラム書きやピープル誌の発送先リストのソートに没頭したりしないということは、
誰でも知っている。
本物のプログラマは地球が震え上がるような任務(それも文字通りのやつ!)をほしがっているのだ。
Re: (スコア:0)
何故? (スコア:0)
仮にもマルウェア解析のプロである人間がVC++で生成されたコードなんて極めてスタンダードなものがわからなかった理由が気になる。
Re:何故? (スコア:3, 参考になる)
ひとくちにVC++といってもバージョンやコンパイルオプション(特にオプティマイザ?)でコードが変わると予想されるので、そんなに簡単に断定できなかったのではないでしょうか。
ブログには、寄せられたコメントをてがかりに
> I spent more time experimenting with different versions of MSVC compilers and different source codes and compiling options...
した結果、
> So, we can say with a high degree of certainty that the resulting binary was compiled with MSVC 2008 and options /O1 /Ob1 and the input source code was pure C.
との記述がありますし。
# GCCはひきあいにだされてるけど、Borlandは???
Re:何故? (スコア:3)
コンパイルオプションでずいぶん変わりますよね。
当該コードの逆アセンブルの結果には、C/C++系の何か、で書かれたっぽいところはあります。
最近は最適化が強力なので、そこから先の何かのレベルになるとわかりづらいんでしょうね多分。
# 昔はアホアホコンパイラが多かったから、わりとわかりやすかったんだけど
Re: (スコア:0)
Re: (スコア:0)
>ひとくちにVC++といってもバージョンやコンパイルオプション(特にオプティマイザ?)でコードが変わると予想されるので、そんなに簡単に断定できなかったのではないでしょうか。
そんなこと言ったら、ほとんどのプログラムで作成されたコードが「簡単に断定できない」ってことになるんだが。
Kaspersky Labsの人が単なる素人だった、ってレベルの話でもないだろ。
Re: (スコア:0)
今回の場合は、独自OOフレームワークが難読化にはからずも貢献したという話だ
Re:何故? (スコア:2)
# いやすごいいっぱいいるけど
Re:何故? (スコア:1)
実はCって知ってたけど、作者を特定するための情報集めにみんな釣られたんじゃね?
Re:何故? (スコア:1)
前のストーリーには
> C++のラインタイムライブラリやSTLの関数が含まれているものの、半分近くにあたる部分はどのような言語で作成されたのか分からないという。
って書かれてるから、少なくとも半分がVC++だったってのは最初からわかってたんじゃないの。残り半分にはどんな未知の言語が使われているのかと思ったらそんなものはなかったぜ! と。
いや、コンパイラは使ってる事に…… (スコア:0)
> Visual C++ でコンパイル
> 「開発者が C++ コンパイラを信用していない」
コンパイラじゃなくてコードじゃね?
と思いソースのブログへ。
軽く検索しただけですが、 Visual Studio とか MSVC とあるだけですかね。 古いバージョン?
> SOO は Duqu がすでに出回ったあとにリリースされたために Duqu で使われている可能性はないとされている。
普通は(?)構想からリリースまでに時間があるんだから、リリース元の周辺から洗うのが定石じゃないのかなぁ、と思ったり。
Re:いや、コンパイラは使ってる事に…… (スコア:2)
20世紀末にはポピュラーなC++コンパイラがなかったから、C言語によるオブジェクト指向システムの設計と実装とか、それっぽくプログラム組むための解説本があったなぁ。
なので、そういうプログラミング方法に触れてる人ってSOO周辺限定ではなく結構いると思う。
Re:いや、コンパイラは使ってる事に…… (スコア:2)
ばかもん! (スコア:0)
>Simple Object Orientation for C (SOO) というものに似ているそうだが、SOO は Duqu がすでに出回ったあとにリリースされたために Duqu で使われている可能性はないとされている。
SOOの開発者がルパンだ!
Re: (スコア:0)
元記事の方に SOO の作者 Alex Marshall さんがコメントしてるよ。
SOO の方は2010年10月から git で公開されているようだけど,Duqu が出回ったのっていつ頃だろう。
認識されだしたのは約1年後だと思うけど…
問い詰めろ! (スコア:0)
実は電車で拾ったCD-Rの中に。。
「不遇な運命で生まれてきた子です。大切に育ててください」