パスワードを忘れた? アカウント作成
2083980 story
プログラミング

マルウェア「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, 興味深い)

    by manmos (29892) on 2012年03月14日 19時11分 (#2117604) 日記

    stuxnet自体が、ものすごい資金力(国家レベル?)で作られた物と推測されてますからね。

    まあ、それ用の言語ぐらい作っていてもおかしくない。

    • by Anonymous Coward

      Refalの末裔とかだったら楽しいな

    • by Anonymous Coward

      つまりイの国の仕業ってことですか

  • 狩り (スコア:3, 興味深い)

    by s02222 (20350) on 2012年03月14日 17時49分 (#2117540)
    チューリング完全性を満たすには論理記号が足りなかったり、オブジェクト間の関係やらが人間の知能が扱える上限を遙かに超えてたりするんですね、分かります [amazon.co.jp]。

    # 2巻の文庫も出てたのか。買わなきゃ。
  • by ef (25263) on 2012年03月14日 18時30分 (#2117577)
    いや元々ブログ主はロシアの会社の中の人だった。
  • リンク先のマルウェア解析内容見ると、コンストラクタで初期化したクリティカルセクションを、デストラクタでDeleteCriticalSection()すべきところ、間違って再度InitializeCriticalSection()しているように見えるが…

    フレームワーク作った人と、それを利用してマルウェア書いた人とは技術力に差がある?
  • 言語が公開されたら、言語の作者本人か、作者に近い人が犯人だから、
    もうその言語が日の目をみることはなくなったワケだ。

    マルウェアを作れるぐらいの完成度を持つ未公開の言語で、
    作者が関知していないというケースも少しはありえるのかな?

  • by Anonymous Coward on 2012年03月14日 18時32分 (#2117578)

    複数言語リンクや、インラインアセンブラの可能性は?

    別に何の言語で作成されてもいいと思うけど、そんなに気になるの?

    • by Anonymous Coward on 2012年03月14日 19時38分 (#2117617)

      言語が分かれば逆コンパイルが楽になる。
      逆コンパイルできれば解析が楽になる。
      特にソース流用している亜種が出たとき、かなり楽になるんじゃないか?
      そしてパターンファイルの確度が上がったりヒューリスティックな判定にも応用できる可能性がある。

      親コメント
    • 別に何の言語で作成されてもいいと思うけど、そんなに気になるの?

      興味を持たれているのはどの言語かじゃなくて、「何故こんなことになってしまっているのか」ではないでしょうか。
      誰かが陽の当たらぬ場所でコツコツ開発してきたものかも知れませんし、学術目的の研究のために作成したか、或いは別のどこかから持ってきた開発環境なのかも知れませんし。トピックの解説にあるような言語仕様だとすると、少なくともそれなりの規模のプロジェクトになると思います。隠れて開発してたとしたら目的は何なんでしょうか。
      最初に発見されたのは今回のマルウェアですが、マルウェアでもない限り解析されない世の中ですから、もしかしたらもう既に我々の生活の中にとけ込んでいるのかも知れませんよ。その謎のコンパイラが吐いたバイナリが。

      親コメント
      • by Anonymous Coward

        stuxnetの亜種らしいし、目的はインフラへの攻撃って明確じゃない?
        何処の国が何処の国を狙って作ったものかは議論のあるところだけど

        でも、高度な産業用OSの知識が必要で、ウィルスとしても凝った作りで、尚且つイランが標的となるとねえ…なんか頭隠して尻隠さず的な

        • by Anonymous Coward

          なぜ本家のほうのバイナリは疑問にせず亜種のほうだけ疑問なんだろう。
          亜種なのに中身はまるで別だったってことなのかな?

  • 対策ソフトに検出されないように、あの手この手をこうじてたらこうなりました、ということは無いのかな?

    --
    # yes, fly. no, fry.
  • なんか javascript をバイナリ化したらそんな感じになるんじゃないかって特徴だと思ったけど、C++やSTLのランタイムが含まれてるならそれは無いか。
    ところでタレこみの「ラインタイムライブラリ」は「ランタイムライブラリ」ですよね?

    • by Anonymous Coward

      その「javascript をバイナリ化する処理系」のランタイムライブラリの一部がC++やSTL使って作られていて、それらのランタイムライブラリを含んでいる可能性は?

    • by Anonymous Coward

      動的言語っぽいですよね。

  • by materialvenus (38016) on 2012年03月14日 20時16分 (#2117639) ホームページ

    完全に未知の言語で書かれたプログラムって
    既存のOSで動作するものなのでしょうか

    という素朴な疑問

    #すいません/.に入り浸って入るものの、こういう方面はど素人です

    • by flied onion (36971) on 2012年03月14日 20時56分 (#2117656) 日記
      最近の言語の中間言語は抜きにして、
      OSが実行ファイルと認識できるようなバイナリ(66 33 C0 みたいな英数の羅列)が用意できれば、バイナリエディタで手で書こうが何かのプログラム言語を使おうが動きます。
      というよりも、プログラム言語は文字のままではどうあがいても動かず、それをOSが動くようなバイナリに事前かその場で変換してあげる必要があり、それを行うのがコンパイラやインタプリタ。

      で、今回のタレこみで言われているのは、コンパイラ(とかインタプリタ)には、癖があるけどどの言語のコンパイラの癖とも断定できない。ということです。
      --
      # yes, fly. no, fry.
      親コメント
    • by Anonymous Coward on 2012年03月14日 22時41分 (#2117704)

      今でも、日夜、「いいアイデアが浮かんだ!」という人が未知の言語を開発してます。
      特定の業務用に特別に作られた言語ってのもあります。
      新規に言語を作るというのは、学生の課題になるくらいにわりとありふれたことです。
      信頼性は言語を作った人の能力によります。

      なので言語(コンパイラ)が吐き出すバイナリコードが既存のターゲットOS(このマルウェアの場合Windows)で動かないとしたら、それはただのバグです。
      言語まで作っておいて動かないのはかなりお粗末で赤面な事態かと思われます。

      周辺ライブラリまで含めて整備するのはかなりの労力(動作テストがいっぱい)ですが、その労力に見合う組織力や報酬があったのでしょう。

      親コメント
    • by Anonymous Coward

      >完全に未知の言語で書かれたプログラムって
      >既存のOSで動作するものなのでしょうか
      API呼び出しだけ規約を設けてあればどんなコンパイラがはき出したコードでもOSとやりとりはできますから
      LISPになじみの無い人がCFFIみると目が点になるのと同じかも

      #完全に未知の〜からMade with secret alien technologyを妄想してしまった

    • by Anonymous Coward

      基本的には最終的にCPUが解釈可能なものに出来れば、その前がどんな形であろうと問題ありません。
      間にOSがあれば、それを意識する必要は出てきますが、基本は同じですし、
      それを人間が意識しなくて済むようにするのも(高級)プログラミング言語の目的の一つです。

      ただどんな形でよいとはいえ、一応イディオムみたいなものはあって、ある程度以上はぶっ飛んだものにはなりにくいですし、
      既存言語を参考にすれば元の言語の特徴を受け継ぎます。
      自然言語でも、何かを伝えるという目的がある以上、(どういうレベルかは置いておいて)5W1Hとか主語述語が必要になるのと似ていると思います。

  • by Anonymous Coward on 2012年03月14日 18時00分 (#2117548)

    プログラミングが下手なだけだったりして

    • by Anonymous Coward

      プログラミング言語にも訛りがあったりして。

    • by Anonymous Coward

      C(not C++)を使ってオブジェクト指向したら、挙げられてる特徴を満たすコードになりそうですねぇ。

      • by USH (8040) on 2012年03月14日 19時36分 (#2117616) 日記

        C++の黎明期、C++のプログラムを一旦Cに変換してコンパイルするっての、ありませんでしたっけ?

        そのせいで、C++に変な制限がついていたりとか。

        親コメント
      • by Anonymous Coward

        それ何てX11

        • by Anonymous Coward

          > 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

      • by Anonymous Coward

        俺もそんな気がした。

  • by Anonymous Coward on 2012年03月14日 18時12分 (#2117558)
    ・逆アセンブルが困難 ・対策が困難 ・なんかかっこいい 他になんかありますか?
    • by epgrec (43527) on 2012年03月14日 18時39分 (#2117584)

      開発した人が使い慣れてるってのもあるんじゃないですかねえ。

      当該ブログを見てみたけれど仮想関数っぽいものがあったり
      割りとちゃんとしたOOっぽかったり
      パラメータはレジスタとスタックで渡していたりとC++処理系っぽかったり
      するので、C++に近いものじゃないかなという感じ。

      超マイナーなC++コンパイラに自作のフレームワークとか
      そういう可能性もあるかもしれない。
      が、マイナーなコンパイラなんてのあるのかな?

      親コメント
      • by ef (25263) on 2012年03月14日 19時07分 (#2117602)

        >> 超マイナーなC++コンパイラに自作のフレームワークとかそういう可能性もあるかもしれない。

        ZortechC++程度のマイナーさならあるかも知れないけど、「関数テーブルがクラスのインスタンス内にある」という特徴からC++の近縁の言語ではないように思えます。

        Prototypeベースのネイティブコンパイラ???IOとかドマイナーな言語しか思いつかないですね。

        親コメント
        • 関数テーブルがクラスのインスタンス内にある・・・というと、COMみたいな実装?
          あれなら、CでもC++でもアセンブラでも実装できますが。
          あとはWindowsの古いドライバモデルもこれに近いですね。

          とか想像しました。

          親コメント
          • by ef (25263) on 2012年03月14日 21時27分 (#2117676)
            Xtイントリンシクスが近いイメージですね。もしかしたらC言語とライブラリだけの実装かも。
            親コメント
          • by Anonymous Coward

            COMのインスタンスはVC++のクラス実装と同じように関数テーブルのポインタしか持ってない

            # つーか、メンバを__stdcallで宣言してるだけの普通のクラス

            • by Anonymous Coward

              インスタンスとインターフェースをごっちゃにしてないか?

              • 間違えてないでしょ。
                COMインスタンスには関数テーブルへのポインタだけが入っています。
                インスタンス内に関数テーブルそのものが入っているわけではありません。

                COMをC言語で使ったことがあればすぐ分かる話だけど、
                C言語でCOMを使う場合、メソッド呼び出しは、関数テーブルを介した間接アドレッシングを行います。

                VBなら「obj.func(…);」、C++なら、「obj->func(…);」と記述するところを、C言語の場合、「obj->vptr->func(obj, …);」と書くわけですね。

                親コメント
              • by Anonymous Coward

                x86のセグメントの呪縛があるのでショートジャンプを繰り返して目的のアドレスに
                たどり着いてようやく実行できるて類ですか。 exploitの典型的な方法ですかね。
                Modula-2 [wikipedia.org]でコンパイルしてcomに吐き出すか、objのままリンクさせて
                るようでは? 今では超マイナー言語でC++黎明の時代ということなら、その時期
                にいくつかMS-DOS上で動作するModula-2コンパイラがアキバでも亜土電子とか
                で手に入りましたし。

    • by Anonymous Coward on 2012年03月14日 18時29分 (#2117575)

      ・新言語の開発効率の良さを示すサンプルプログラムがたまたまマルウェアだった

      親コメント
    • by Anonymous Coward

      現に使われてる以上理由はあるんでしょう。マルウェア作者は金のためにやってるのであって遊びじゃないんですから普通はより効率的に金儲けできる方法を追求するでしょう。

    • by Anonymous Coward

      俺言語なら、欲しい機能を自由に組み込める。マルウェアに役立ちそうなものでもあれば。
      ちょっとしたハッカーだったら、それくらいやっててもおかしくない。

  • by Anonymous Coward on 2012年03月14日 18時21分 (#2117566)

    Forth じゃね?

    // タイトルだけ見てコメントしましたごめんなさい

  • by Anonymous Coward on 2012年03月14日 18時41分 (#2117585)
    の出番ですね
  • by Anonymous Coward on 2012年03月14日 19時33分 (#2117614)

    「ひまわり」とか「なでしこ」じゃね?

  • by Anonymous Coward on 2012年03月14日 23時15分 (#2117716)

    C++で作成されたらしいStuxnetのバイナリを逆コンパイル、
    生成されたCのソースを改造して、再度コンパイルしたとか?

typodupeerror

にわかな奴ほど語りたがる -- あるハッカー

読み込み中...