安全になるための正しい方法:Lamerから実用的な悪用まで

ご挨拶、%Habraiser%。 私はここで「将来のための試験」ロシアのハッカー「モスクワ工科大学」のhabrに関する記事を読みました。 そして、私の脳は、何が起こっているのかを誤解する無限のサイクルに入りました。 私は単に「ハッカー」の学校を見たか、実際にハブラーを見た。 申し訳ありませんが、このアプローチでは、現在の世代の白に代わる人はいません。



この記事では、謙虚な意見(以前は黒人のバグハンターでした)で、道を切り開く価値がある方法を書きたいと思います。 そして、Kali linuxでは決してありません(結局のところ、彼らは首都のポリテクニックで教えています。



あなたが私の道に部分的に興味があるなら、猫へようこそ。



Habrユーザーはすでに多くの手順を完了しているため、レベルに安全にスキップできます。 基本的に、このOSは私の専門であり、最も一般的であるため、この投稿はWindowsに関するものです。 ここでのコードは、バッファオーバーフローの脆弱性の例として考えますが、既成のエクスプロイトには到達しません。これは別の非常に広範なトピックです。



ステップ0. lamerからnoobへ



まず第一に、あなたが働いているオペレーティングシステムを勉強する必要があります。 どんなに些細なことに聞こえるかもしれませんが、OSの知識は、時にはその逆ではないことを示します。



たとえば、Windows 10のUACバイパスは、eventvwrの使用中に機能する1つのprocmonのおかげで発見されました。 おもしろいですが、権限を増やすという事実は、最初にeventvwrが1つのブランチでレジストリキーを探し、それを見つけずに、別のブランチで探しました。 実際、最初は通常は何も見つかりませんでした。最終的には、ファイルへのパスをそこに書き込み、アプリケーションが昇格された権限で起動したらすぐにeventvwrを実行するだけで十分でした。



ここでは1バイトも解決されていませんが、研究者はUACのバイパスを発見しました。



そのため、最初にオペレーティングシステムを学習します。 徹底的に。 彼女のデバイスでさまざまな本を読んでください。 特にWindowsでは、Mark Russinovichに「Internal Windows device」とアドバイスできます。 autorunsやprocmonなどの一般的なユーティリティの著者からの本



Windowsの場合:RegMonやFileMonなどのプログラムで遊んでください。 OSキャストを「前」と「後」にして比較することができます。 OS設定の変更など、さまざまなパラメーターの変更内容を確認します。



仮想マシンを配置し、最も倒錯した方法でOSを「殺す」ことを試み、それを修正します。



その後、再びRegMonとFileMonに戻って、さまざまなサンプルを実行できます。 その後、あなたはすでに症状によってほとんどすべてのmalvarを見つけることができます。



Malvarはここから入手できます。



非表示のテキスト
注意! 悪意のあるファイルへのリンクを含むサイト

ご自身の責任で行ってください

弊社が作成したマルウェアの多くはRUマシンでは開始されません;ロシアレイアウトのない仮想マシンにENGマシンを配置します

MalwareBlacklist.com

malwr.com(登録が必要です)

kernelmode.info(よく知られているかなりのマルウェア)



使用しているオペレーティングシステムを学習したら、さらに先に進むことができます。



ステップ1. Noobから開発者へ



この段階で、プログラミング言語を学びます。 たとえば、python-初心者にはかなり良いですし、将来、エクスプロイトの作成やファジング(後で検討します)に役立つでしょう。



その後、siを学ぶと、メモリを操作することの理解が得られ、パフォーマンスについて考えるように教えられ、母国語としても役立ちます。



少なくとも一般的な原則では、さらにアセンブリ言語。 レジスタとは何か、スタックとは何か、基本的な命令。 逆に有用で、読書は特別な知識を必要としません。



この順序:python、C / C ++、アセンブラー



ステップ2.開発者から優秀な開発者へ



この時点で、悪いコードと良いコードを区別することを学ぶ必要があります。 エラーを確認し、アセンブラーを知ってください。



このステップに合格したかどうかを確認する方法は? 次のコードが何につながるか教えてください:



#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> void Encr(char *in, char *out, int key) { for (int i = 0; i < strlen(in); i++) out[i] = in[i] + key; } int main(int argc, char *argv[]) { char EncryptedStr[10] = { 0 }; if (argc > 1) { Encr(argv[1], EncryptedStr, 5); printf("Encrypted: %s\n", EncryptedStr); } return 0; }
      
      





このプログラムは、引数に文字列を受け取り、キー5を使用してCaesarのアルゴリズムで暗号化し、結果をEncryptedStrに保存します。



このコードの何が悪いのか、何につながるのか?



答えは:



非表示のテキスト
このプログラムでは、9文字より長い文字列(10番目の文字がゼロ)を渡すと、バッファオーバーフローが発生する可能性があります。 スタック上の関数からの戻りアドレスを上書きし、プロセスメモリで任意のコードを実行できるようにします。 これがサーバーソフトウェアにある場合-これは、権限のないユーザーがサーバー上で任意のコードを実行できるという事実につながる可能性があります



しかし、このコードは2000年代のものです。 現時点では、DEP、ASLR、セキュリティCookieなどの技術があるため、このホールを悪用することは困難です。 ただし、これもバイパスされます。 たとえば、ret2libcを読むことができます



ステップ3.優れた開発者からリバースへ



IDA Proを使用したアセンブラーリストで前の例を見てみましょう



非表示のテキスト




どんなにあなたが大騒ぎしても、ここでRCEを見つけるのは私にとっても難しい。 しかし、人生の例はもっと複雑です。 そのため、特別なツール-ファザーがあります。



ファザーとは何ですか? これは、 メーザーのような映画からレーザーであり、非標準的な動作を見つけるためにアプリケーションに誤ったデータをあふれさせる特別なソフトウェアです。 つまり、入力データが受信されるすべての場所で、ランダムデータを送信して結果を監視するようなスクリプトを作成できます。 結果が転倒につながった場合、脆弱性が見つかりました。



たとえば、アプリケーションの場合、最も単純なファザーは次のようになります。



 #/usr/bin/python import subprocess i = 0; while True: i += 1 if subprocess.call('test1.exe {0}'.format("A" * i), shell=True) != 0: print 'Crashed with arguments: {0}'.format("A" * i) break print "Finished"
      
      





結果は次のとおりです。



非表示のテキスト




フェイザーの詳細については、 こちらをご覧ください。



したがって、ソースコードまたは逆アセンブリスキルがなければ、脆弱性が見つかります。 あらゆる種類の入力を生成するファザーを作成できます。



逆から搾取者へ



エクスプロイトの作成を開始できたら。



たとえば、アプリケーションの場合、最も単純なエクスプロイトは擬似コードで次のようになります



 #/usr/bin/python import subprocess subprocess.call('test1.exe '.format("A" * 10 + address + there_shellcode), shell=True);
      
      





ここで、addressはメモリ内の書き換え可能なバッファのアドレスであり、there_shellcodeはバッファがオーバーフローしたときに実行されるシェルコードです。



これが正確にどのように配置されているかはGoogleで確認できます。



結論の代わりに



私のオプションは、カット前の記事とは対照的に、はるかに広範囲で実用的です。 ただし、より複雑です。



スクリプトdddiを介して、または悪用を介して-あなただけが選択します。



All Articles