マルウェア「Duqu」は未知の言語で開発された? 66
ストーリー by hylom
未知との遭遇 部門より
未知との遭遇 部門より
insiderman 曰く、
Internet Watchの記事「国家によるサイバー戦争は新局面に? メディア報道の動きや謎の言語の発見」に興味深い一文があった。記事内容としては、国家ぐるみでのサイバー攻撃が増えているというものなのだが、Kasperskyが「Duqu」というマルウェアを調査したところ、どのようなプログラミング言語で実装されたのかまったく特定できなかったというのだ。
このほか3月8日には、Stuxnetの亜種と考えられているマルウェア「Duqu」に関し、ロシアのKaspersky Labsが奇妙な知見をもたらした。同社では「数え切れないほどの時間を費やしてもなお、Duquが開発されたプログラミング言語を全く特定できない」とし、世界中の研究者に援助を求め、ブログにその分析内容を公開した。
該当のブログによると、Duquのコードが格納されているDLLにはC++のラインタイムライブラリやSTLの関数が含まれているものの、半分近くにあたる部分はどのような言語で作成されたのか分からないという。この部分は「Duqu Framework」と名づけられており、オブジェクト指向的なパラダイムではあるが、関数テーブルがクラスのインスタンス内にある、ユーティリティクラスとユーザーが作成したクラスの区別がない、オブジェクト間の通信はメソッド呼び出しで行われている、ランタイムライブラリ関数への参照は含まれていない、といった特徴を持つという。 Kaspersky labsのブログには逆アセンブルリストや動作モデルなどが掲載されているので、興味のある人はそちらをチェックしてほしい。
stuxnetの亜種 (スコア:4, 興味深い)
stuxnet自体が、ものすごい資金力(国家レベル?)で作られた物と推測されてますからね。
まあ、それ用の言語ぐらい作っていてもおかしくない。
Re: (スコア:0)
Refalの末裔とかだったら楽しいな
Re: (スコア:0)
つまりイの国の仕業ってことですか
狩り (スコア:3, 興味深い)
# 2巻の文庫も出てたのか。買わなきゃ。
ロシア語で考えるんだ (スコア:3)
Re: (スコア:0)
MiG-31 Firefox とは懐かしい
ファイヤーフォックス (映画) - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%A4%E3%8... [wikipedia.org]
firefoxはロシア語で・・ - ナンセンス不定記
http://d.hatena.ne.jp/hiuchida/20060513/1147508142 [hatena.ne.jp]
そういえば、Five Star Stories の破烈の人形で同じネタを使っていたのを思い出した
これバグってないか? (スコア:2)
フレームワーク作った人と、それを利用してマルウェア書いた人とは技術力に差がある?
公開すらされない言語がまたひとつ消えて行くよ (スコア:2)
言語が公開されたら、言語の作者本人か、作者に近い人が犯人だから、
もうその言語が日の目をみることはなくなったワケだ。
マルウェアを作れるぐらいの完成度を持つ未公開の言語で、
作者が関知していないというケースも少しはありえるのかな?
言語がそんなに重要? (スコア:1)
複数言語リンクや、インラインアセンブラの可能性は?
別に何の言語で作成されてもいいと思うけど、そんなに気になるの?
Re:言語がそんなに重要? (スコア:4, すばらしい洞察)
言語が分かれば逆コンパイルが楽になる。
逆コンパイルできれば解析が楽になる。
特にソース流用している亜種が出たとき、かなり楽になるんじゃないか?
そしてパターンファイルの確度が上がったりヒューリスティックな判定にも応用できる可能性がある。
Re:言語がそんなに重要? (スコア:2)
興味を持たれているのはどの言語かじゃなくて、「何故こんなことになってしまっているのか」ではないでしょうか。
誰かが陽の当たらぬ場所でコツコツ開発してきたものかも知れませんし、学術目的の研究のために作成したか、或いは別のどこかから持ってきた開発環境なのかも知れませんし。トピックの解説にあるような言語仕様だとすると、少なくともそれなりの規模のプロジェクトになると思います。隠れて開発してたとしたら目的は何なんでしょうか。
最初に発見されたのは今回のマルウェアですが、マルウェアでもない限り解析されない世の中ですから、もしかしたらもう既に我々の生活の中にとけ込んでいるのかも知れませんよ。その謎のコンパイラが吐いたバイナリが。
Re: (スコア:0)
stuxnetの亜種らしいし、目的はインフラへの攻撃って明確じゃない?
何処の国が何処の国を狙って作ったものかは議論のあるところだけど
でも、高度な産業用OSの知識が必要で、ウィルスとしても凝った作りで、尚且つイランが標的となるとねえ…なんか頭隠して尻隠さず的な
Stuxnetの亜種なら (スコア:0)
なぜ本家のほうのバイナリは疑問にせず亜種のほうだけ疑問なんだろう。
亜種なのに中身はまるで別だったってことなのかな?
ウィルス対策ソフトが生み出した (スコア:1)
対策ソフトに検出されないように、あの手この手をこうじてたらこうなりました、ということは無いのかな?
# yes, fly. no, fry.
スクリプトコンパイラ? (スコア:1)
なんか javascript をバイナリ化したらそんな感じになるんじゃないかって特徴だと思ったけど、C++やSTLのランタイムが含まれてるならそれは無いか。
ところでタレこみの「ラインタイムライブラリ」は「ランタイムライブラリ」ですよね?
Re: (スコア:0)
その「javascript をバイナリ化する処理系」のランタイムライブラリの一部がC++やSTL使って作られていて、それらのランタイムライブラリを含んでいる可能性は?
Re: (スコア:0)
動的言語っぽいですよね。
でも (スコア:1)
完全に未知の言語で書かれたプログラムって
既存のOSで動作するものなのでしょうか
という素朴な疑問
#すいません/.に入り浸って入るものの、こういう方面はど素人です
Re:でも (スコア:2)
OSが実行ファイルと認識できるようなバイナリ(66 33 C0 みたいな英数の羅列)が用意できれば、バイナリエディタで手で書こうが何かのプログラム言語を使おうが動きます。
というよりも、プログラム言語は文字のままではどうあがいても動かず、それをOSが動くようなバイナリに事前かその場で変換してあげる必要があり、それを行うのがコンパイラやインタプリタ。
で、今回のタレこみで言われているのは、コンパイラ(とかインタプリタ)には、癖があるけどどの言語のコンパイラの癖とも断定できない。ということです。
# yes, fly. no, fry.
Re:でも (スコア:1)
今でも、日夜、「いいアイデアが浮かんだ!」という人が未知の言語を開発してます。
特定の業務用に特別に作られた言語ってのもあります。
新規に言語を作るというのは、学生の課題になるくらいにわりとありふれたことです。
信頼性は言語を作った人の能力によります。
なので言語(コンパイラ)が吐き出すバイナリコードが既存のターゲットOS(このマルウェアの場合Windows)で動かないとしたら、それはただのバグです。
言語まで作っておいて動かないのはかなりお粗末で赤面な事態かと思われます。
周辺ライブラリまで含めて整備するのはかなりの労力(動作テストがいっぱい)ですが、その労力に見合う組織力や報酬があったのでしょう。
Re: (スコア:0)
>完全に未知の言語で書かれたプログラムって
>既存のOSで動作するものなのでしょうか
API呼び出しだけ規約を設けてあればどんなコンパイラがはき出したコードでもOSとやりとりはできますから
LISPになじみの無い人がCFFIみると目が点になるのと同じかも
#完全に未知の〜からMade with secret alien technologyを妄想してしまった
Re: (スコア:0)
基本的には最終的にCPUが解釈可能なものに出来れば、その前がどんな形であろうと問題ありません。
間にOSがあれば、それを意識する必要は出てきますが、基本は同じですし、
それを人間が意識しなくて済むようにするのも(高級)プログラミング言語の目的の一つです。
ただどんな形でよいとはいえ、一応イディオムみたいなものはあって、ある程度以上はぶっ飛んだものにはなりにくいですし、
既存言語を参考にすれば元の言語の特徴を受け継ぎます。
自然言語でも、何かを伝えるという目的がある以上、(どういうレベルかは置いておいて)5W1Hとか主語述語が必要になるのと似ていると思います。
下手 (スコア:0)
プログラミングが下手なだけだったりして
Re: (スコア:0)
プログラミング言語にも訛りがあったりして。
Re: (スコア:0)
C(not C++)を使ってオブジェクト指向したら、挙げられてる特徴を満たすコードになりそうですねぇ。
Re:下手 (スコア:1)
C++の黎明期、C++のプログラムを一旦Cに変換してコンパイルするっての、ありませんでしたっけ?
そのせいで、C++に変な制限がついていたりとか。
Re:下手 (スコア:2)
cfront [wikipedia.org]
Re: (スコア:0)
それ何てX11
Re: (スコア:0)
> The layout of each object depends on its class. Some classes appear to have binary compatible function tables but there is no indication that they have any common parent classes (like in other OO languages). Furthermore, the location of the function table is not fixed: some classes have it at offset 0 of the instance, but some does not.
オブジェクト内での関数テーブルの位置が不定らしいのと
> Member functions can be referenced by the object’s function table (like “virtual” functions in C++) or they c
Re: (スコア:0)
俺もそんな気がした。
専用の言語を使う利点 (スコア:0)
Re:専用の言語を使う利点 (スコア:2)
開発した人が使い慣れてるってのもあるんじゃないですかねえ。
当該ブログを見てみたけれど仮想関数っぽいものがあったり
割りとちゃんとしたOOっぽかったり
パラメータはレジスタとスタックで渡していたりとC++処理系っぽかったり
するので、C++に近いものじゃないかなという感じ。
超マイナーなC++コンパイラに自作のフレームワークとか
そういう可能性もあるかもしれない。
が、マイナーなコンパイラなんてのあるのかな?
Re:専用の言語を使う利点 (スコア:2)
>> 超マイナーなC++コンパイラに自作のフレームワークとかそういう可能性もあるかもしれない。
ZortechC++程度のマイナーさならあるかも知れないけど、「関数テーブルがクラスのインスタンス内にある」という特徴からC++の近縁の言語ではないように思えます。
Prototypeベースのネイティブコンパイラ???IOとかドマイナーな言語しか思いつかないですね。
Re:専用の言語を使う利点 (スコア:2)
関数テーブルがクラスのインスタンス内にある・・・というと、COMみたいな実装?
あれなら、CでもC++でもアセンブラでも実装できますが。
あとはWindowsの古いドライバモデルもこれに近いですね。
とか想像しました。
Re:専用の言語を使う利点 (スコア:2)
Re: (スコア:0)
COMのインスタンスはVC++のクラス実装と同じように関数テーブルのポインタしか持ってない
# つーか、メンバを__stdcallで宣言してるだけの普通のクラス
Re: (スコア:0)
インスタンスとインターフェースをごっちゃにしてないか?
Re:専用の言語を使う利点 (スコア:1)
間違えてないでしょ。
COMインスタンスには関数テーブルへのポインタだけが入っています。
インスタンス内に関数テーブルそのものが入っているわけではありません。
COMをC言語で使ったことがあればすぐ分かる話だけど、
C言語でCOMを使う場合、メソッド呼び出しは、関数テーブルを介した間接アドレッシングを行います。
VBなら「obj.func(…);」、C++なら、「obj->func(…);」と記述するところを、C言語の場合、「obj->vptr->func(obj, …);」と書くわけですね。
Re: (スコア:0)
x86のセグメントの呪縛があるのでショートジャンプを繰り返して目的のアドレスに
たどり着いてようやく実行できるて類ですか。 exploitの典型的な方法ですかね。
Modula-2 [wikipedia.org]でコンパイルしてcomに吐き出すか、objのままリンクさせて
るようでは? 今では超マイナー言語でC++黎明の時代ということなら、その時期
にいくつかMS-DOS上で動作するModula-2コンパイラがアキバでも亜土電子とか
で手に入りましたし。
Re:専用の言語を使う利点 (スコア:1)
・新言語の開発効率の良さを示すサンプルプログラムがたまたまマルウェアだった
Re: (スコア:0)
現に使われてる以上理由はあるんでしょう。マルウェア作者は金のためにやってるのであって遊びじゃないんですから普通はより効率的に金儲けできる方法を追求するでしょう。
Re: (スコア:0)
俺言語なら、欲しい機能を自由に組み込める。マルウェアに役立ちそうなものでもあれば。
ちょっとしたハッカーだったら、それくらいやっててもおかしくない。
s->θ の暗黒卿 (スコア:0)
Forth じゃね?
// タイトルだけ見てコメントしましたごめんなさい
Re:s-θ の暗黒卿 (スコア:3, おもしろおかしい)
サーバサイドではなく、ダークサイドで動くのか。
パワーありそうだな。
IBN5100 (スコア:0)
実は (スコア:0)
「ひまわり」とか「なでしこ」じゃね?
Re:実は (スコア:1)
mindかも知れない…
#流石にぴゅう太ベーシックではないだろう
/* Kachou Utumi
I'm Not Rich... */
コンパイル→逆コンパイル→コンパイル (スコア:0)
C++で作成されたらしいStuxnetのバイナリを逆コンパイル、
生成されたCのソースを改造して、再度コンパイルしたとか?
Re:より優れたプログラミング言語を作れる可能性を示していると思う。 (スコア:1)
vyama 「バグ取れワンワン」
Re:Kasperskyで調査すればわかる (スコア:1)
全然ひっかかってこなくて何故かと思ったら
Kasperskyのみがその特徴を持っているんですね。