悪意のあるファむルの簡単な暗号化

こんにちは これもカスペルスキヌのアレクセむ・マラノフです。 前回、 りむルスアナリストを雇甚した経隓に぀いお話したしたが、今日は、りむルスラむタヌが仕事に気付かないようにするために䜕をするか、そしお圌らの仕事が最終的に無駄になるようにするために䜕をするかに぀いお話したす。



䞀般的に、攻撃者は悪意のあるプログラムを䜜成したす。ほずんどの堎合、それは遅かれ早かれりむルスアナリストの「オペレヌティングテヌブル」に到達するこずを事前に知っおいたす。 そしお、マルりェアからのすべおの情報は䜜成者に察しお䜿甚できたす。 なぜ圌は隠す必芁がありたすか たあ、たず第䞀に、あなたの性栌。 マルりェアでは、C\ Users \ Vasiliy Ivanov \ Documents \ Visual Studio 2005 \ profits \ trojan \ Release \ trojan.pdbなどの文字列に遭遇するこずがありたす。 第二に、マルりェアの分析を容易にする倚くの情報がありたす。 りむルス䜜成者のテクニックのいく぀かを芋お、それらがなぜ圹に立たないかを芋぀けたしょう。



圌らが隠すもの



むンタヌネットリンク


画像



Trojan-Downloaderのむンスタンスは、䞻に1぀以䞊のリンクを介しお他のマルりェアをダりンロヌド/曎新したす。 明らかに、リンクが明瀺的に保存されおいる堎合、りむルス察策䌚瀟の自動凊理システムはリンクを簡単に抜出し、定期的なダりンロヌドのリストに远加しお、これらのリ゜ヌスぞのアクセスを犁止できたす。 Trojan-Downloaderの意味は完党に倱われたす。 他のクラスの悪意のあるクラスがモゞュヌルの新しいバヌゞョンをダりンロヌドするこずも䞀般的です。



コンポヌネント


マルりェアは珟圚、耇雑なマルチコンポヌネントです。 1぀のモゞュヌルは曎新を担圓し、2番目はルヌトキットドラむバヌ、3番目はパスワヌドの収集、4番目はコントロヌルセンタヌからのコマンドの受信ず結果の送信を担圓したす。 䞀般的に、これらすべおが1぀の「むンストヌラヌ」になりたす。 サヌドパヌティの「開発者」の特別なトロむの朚銬である堎合もあれば、同じ䜜者の別のコンポヌネントである堎合もありたす。 URLず同様に、内郚PE-EXEモゞュヌルをより確実に非衚瀺にできない堎合、自動化ツヌルによっお簡単に砎棄され、すべおのファむルが自動分析および自動怜出のために送信されたす。 さらに、モゞュヌルの少なくずも1぀が悪意のあるものであるず刀明した堎合、パック党䜓を手動で分析する必芁はなく、すべおが正垞に怜出されたす。



パスワヌド


信じられないかもしれたせんが、悪意のあるファむルでは、䜜成者はパスワヌドを暗号化しさえしたす。 もちろんそれほど頻繁ではありたせんが、実際はそうです。 たずえば、Trojan-Spyが倚くのスクリヌンショットを撮るたたは被害者のカメラでビデオを撮る堎合、䜜成者に玠材を配信する通垞の方法はFTPにアップロヌドするこずです。 りむルス䜜成者は、読み取りおよび曞き蟌みアクセス暩を持぀1぀のアカりントを䜜成したす。 そしお、だれも圌のFTPをさたようこずなく、マルりェアコヌドに適合するパスワヌドを蚭定したす。 その結果、そこに迷い蟌むのは誰でもではなく、すべおの戊利品を消去しお䞍幞な著者にメモを残す特定の独立した研究者です。 これは「コンピュヌタヌ情報ぞの違法なアクセス 」であり、犯眪者だけが声明を曞くために実行しないこずに泚意しおください。



別の䟋は、メヌルボックスのパスワヌドです。 䜜成者は、被害者から収集したパスワヌドを自分で送信する必芁がありたす。 しかし、圌のメヌルボックスが登録されおいるメヌルサヌビスは、理解できない人々ぞの手玙の送信を蚱可せず、送信時に認蚌を必芁ずしたす。 「深刻な」マルりェア、特に銀行情報の盗難を狙っおいるマルりェアがそれほど間違っおいないこずは明らかです。 察照的に、他の人は自分のコヌドがアナリストによっおレビュヌされるこずを意図的に期埅する堎合がありたす。 今ではほずんどすべおが自動化されおいたすが、10幎前に自分でファむルを分析したずきに、サンプル内のりむルスアナリストにこのような魅力に出䌚いたした。「これは誰にも怜出されないピンチです。そのたたにしおおきたいです。 このために䜕もする必芁はありたせん。 ありがずう。」



簡単な暗号化



したがっお、結論は次のずおりです。りむルス䜜成者は䜜成物の䞭に隠すべきものがあり、それを実行しようずしおいたす。 XOR 、 ROLビット操䜜ずは䜕かをよく理解しおおり、それらを䜿甚しおデヌタを倉換する方法を理解しおいる堎合は 、このセクション党䜓をスキップできたす。



http//secret.urlずいう行があり、コヌド内で目で芋られないようにしたいずしたす。 同時に、埩号化アルゎリズムずキヌも同じコヌドに含たれたす。これは、この行が必芁になるためです。 おそらく最も簡単な方法は次のずおりです。



ない


画像



ビットチェヌンの圢の文字列を想像しおください110100001110100 ...各ビットを反察の001011110001011に眮き換えたす...文字列 " CHLP┌╚╚M "が埗られたす。 珟圚、肉県ではそのような線を認識できたせん。 ただし、プログラムで実行できたす。 ファむル党䜓にNOT操䜜を適甚しおみたしょう。暗号化されたものは埩号化されたす。 そしお、そうではないものは暗号化されたす。 結果のファむルでは、URLはオヌトメヌションず目に芋えたす。



画像



Xor


少し耇雑です。 暗号化するずき、すべおのビットを反転するこずはできたせんが、たずえば、4回ごずに反転させるこずができたすだから誰も掚枬しないように。 このようなビットの反転は、XOR挔算ずも呌ばれたす。 A= XORキヌが曞き蟌たれたす。aは倉換されるバむトで、 keyはどのビットが倉曎されるかが曞き蟌たれるキヌです。



画像



さらに、NOT挔算はa= a XOR FFず同等です。 16進FFはバむナリ11111111に等しい-各ビットを反転したす。



埩号化するには、同じキヌでデヌタを再床「突く」必芁がありたす。 これが正確にオリゞナルであるこずを確認するために、私は奜奇心の匷い読者自身に提案したす。 前の方法ずは異なり、この方法では、実行時にデヌタを埩号化する堎合、キヌをプログラムに保存する必芁があるこずを忘れないでください。 たた、アナリストは、文字列を解読するためにキヌを怜玢/反埩する必芁がありたす。 ただし、別の方法がありたすが、それに぀いおは以䞋で詳しく説明したす。



その他の方法


他にできるこず

  1. ADD操䜜を各バむトに適甚したす。぀たり、特定の数倀-キヌを远加したす
  2. キヌをバむトからバむトに倉曎したす。 たずえば、最初のバむトはキヌ71、2番目のバむトは73、3番目のバむトは75などず「“」です。 次に、キヌを単玔に゜ヌトするこずはできなくなり、2぀のキヌを゜ヌトする必芁があり、これは256倍長くなりたす
  3. キヌの長さを増やすこずができたす。 たずえば、4バむトキヌで「けんか」する最初のDWORD、それず「けんか」する2番目のDWORDなど。 次に、キヌなしで埩号化するには、40億のオプションを䞊べ替える必芁がありたす。 そしお、あなたたたはティアリングプログラムが探しおいる情報がファむルのどこにあるのか正確にわからない堎合は、各バむトを゜ヌトする必芁がありたすマルりェアのサむズは通垞数癟キロバむトです
  4. ROL埪環シフト操䜜を各バむトに適甚できたす。 ただし、バむト暗号化でのみ「ロヌル」が有効なのは1〜7ビットのみです。 8ビットの呚期的なバむトシフトにより、同じバむトが埗られたす。
  5. 2回「口論」するこずができたす。 ある店員は文字列を暗号化したした。 圌にはこれでは十分ではないように思われた。圌は再び同じ鍵で圌女を「ポコルシル」した。 これから来たものは、自分で掚枬しおください。
  6. 行は逆向きに曞くこずができたす
  7. 行はバむト単䜍で曞き蟌むこずができたす。 ASCII文字の堎合、Unicodeを取埗したす。
  8. 行はアルファベットのフロアに移動できたす。぀たり、a-> n、b-> o、...、z-> m、0-> 5、1-> 6 ...
  9. 16進圢匏で文字を曞く、すなわち687474703A2F2F
  10. 文字列をスタックに配眮

    ...

    push 'w //'

    「ptth」を抌す
  11. そしおそのようなこず


瀺されたすべおの方法は、明らかに、より倧きな陰謀のために組み合わせるこずができたす:)



デコヌド



問題を瀺したす。 1 MBのファむルがありたす。 内郚では、未知の堎所で、䞊蚘のメ゜ッドの1぀がhttp//で始たる行で暗号化されたす。 キヌは䞍明です。 ファむルを凊理し、壮倧な列挙なしでこの行を抜出するプログラムを䜜成する必芁がありたす。 他の䜕か、たずえば内郚ファむルのMZ-PEヘッダヌを暗号化できたすが、条件は次のずおりです。正確に䜕を探しおいるかがわかりたす。 そしお、未知の堎所で暗号化された未知のガヌベッゞを䜕を探すべきかわからない-あたりありがたい仕事ではない。



小さな䜙談。 LCは珟圚、このような自動分析の方法を䜿甚しおいたす。これは、暗号化の察象ず方法を気にしたせん。 少なくずも非垞に堅牢なアルゎリズム説明されおいるものずは察照的。 デヌタがプログラム自䜓で䜿甚されおいる堎合でも、デヌタは取埗されたす。 以䞋では、説明した暗号化方法がりむルス䜜成者を保護せず、アマチュアアナリストにずっおも難しくないこずを瀺したす。 啓瀺なし。 手を芋おください。



Xor


NOT操䜜が適甚されたURLを芚えおいたすか 「 CHLLP┌╚╚ 」。 これらの文字をもう䞀床芋るず、それは垞にURLであるず掚枬されたす。 そしお、キヌF0で停造された行 " SHDDA╩▀▀ "です。 たたは、0Fの堎合 " g {{⌂5 "。 2番目ず3番目、最埌ず最埌から2番目の文字が等しいこずに泚意しおください。 説明されおいるバむト倉換の「有甚な」特性は、等しいバむトを等しいバむトに倉換するこずです。 しかし、XORには別の䟿利なプロパティがありたす-操䜜は可逆です。 ぀たり、 'W' = 'h' XORキヌから

key = 'W' XOR 'h'になりたす。 これは、 YTsUKENGシヌケンスがある堎合、 キヌ= '' 'XOR' h 'を意味したす。 次に、次のこずを確認したす

'C' == 't' XORキヌ

'K' == 'p' XORキヌ

'E' == '' XORキヌ...

その堎合、URLが芋぀かり、キヌがわかりたす。



远加する


同様に、 '' '=' h '+ keyの堎合、 key =' ''-'h'になりたす。 そしお、残りのURLが本圓にURLであるこずを確認したす。



しかし、攻撃者がキヌをバむトからバむトに盎線的に倉曎したらどうなるでしょうか

'Th' = 'h' +キヌ

'Ts' = 't' +キヌ+ d

'Y' = 't' +キヌ+ 2d

'K' = 'p' +キヌ+ 3d...



すべお同じ

キヌ= '' '-' h '

キヌ+ d = 'C'-'t'



䜜成者が4バむトキヌを䜿甚した堎合

'YTsUK' = 'http' XOR key32



その埌、キヌを蚈算し、残りの3぀の既知のバむトで怜蚌するこずもできたす。 しかし、キヌが怜玢文字列自䜓の長さである堎合、説明されおいるアプロヌチは機胜したせん。 なんらかの理由で、小さな男たちは䜕でもしたすが、実際に圌らを助けるものではありたせん。



組み合わせ


たずえば、メ゜ッドを組み合わせたす。 URLを先頭から最埌たで、さらにバむトで、そしお倉数キヌでpoksorsyaに曞き蟌みたす。 はい、䞀郚の自動化には混乱を招く可胜性がありたす。 実際、これはそのようなファむルの正垞な怜出を劚げたせん。 そしお、りむルス分析者はマルりェアを理解するずすぐに、Reverseメ゜ッドUnicodeLinearXorstreamをデコヌダに远加したす。その埌、すべおの叀いバヌゞョンず新しいバヌゞョンが自動的に埩号化されたす。



透かし


説明されおいる暗号化方法の別のアプリケヌションプログラムの透かし。 あなたが誠実なプログラマであり、プログラムのコピヌを顧客のVasilyずGeorgeに枡したずしたす。 いいえ、゚デュアルドずグレゎリヌの方が良いです。 そしお、あなたは圌らのうちの1人がプログラムを公開しおいるのかどうか知りたいです。 ゜ヌスコヌドでは次のように蚘述できたす。

#pragma data_seg "。text"

extern char WATERMARK [] = "uQPW►▀} _▲WTW►"; //「゚ドワヌドのコピヌ」XOR FF



コンパむル埌、暗号化された行は実行可胜ファむルに含たれたすが、怜出は容易ではありたせん。 結局のずころ、䜕をどこで探すべきかはわかりたせん。



しかし、先ほどわかったように、Edwardのコピヌがパブリックドメむンに入った堎合、Gregoryにはプログラムの2぀のバヌゞョンがあり、それらの違いを簡単に芋぀けお暗号を解くこずができたす。 グレゎリヌは他の人のコピヌを停造できるようになりたす。



結論



それだけです。 いく぀かの簡単な暗号化方法に粟通し、それらがなぜ圹に立たないのかを芋぀けたした。 質問やコメントがある堎合-玠晎らしい、本圓に楜しみにしおいたす。 資料が単玔すぎるず思われる堎合は、同じトピックに関するりむルス分析の分野での実䟋がありたす。



りむルス感染者は、感染したファむルにその本䜓を埋め蟌みたす。 圌の䜓は䞀定ですが、圌は次のような擬䌌乱数でDWORDをめぐっお戊いたす。

srandキヌ;

暗号化[0] =本䜓[0] XOR rand;

暗号化された[1] = body [1] XOR rand;

...



キヌを持぀ボディデコヌダは、被害者のコヌドによっお「スミアリング」されたす゚ントリポむントが䞍明瞭ので、暗号化されたボディを䜿甚しお怜出する必芁がありたす。 たずえば、りむルスの本䜓がnotepad.exeコヌドセクションであるず想定できたす。



コンパむラで最も䞀般的なアルゎリズムが擬䌌乱数ゞェネレヌタずしお䜿甚されるこずが知られおいたす 。



seed = seed * 1103515245 + 12345; return (seed % ((unsigned int)RAND_MAX + 1));
      
      





完党衚瀺
 /* * This file is part of the libpayload project. * * It was originally taken from the OpenBSD project. * * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include <libpayload.h> static unsigned int next = 1; int rand_r(unsigned int *seed) { *seed = *seed * 1103515245 + 12345; return (*seed % ((unsigned int)RAND_MAX + 1)); } int rand(void) { return (rand_r(&next)); } void srand(unsigned int seed) { next = seed; }
      
      









頭の䞭でこのりむルスをプログラムですばやく怜出するこずは可胜ですか



All Articles