着信SSH接続のトラップ(Tarpit)

インターネットが非常に敵対的な環境であることは秘密ではありません。 サーバーを持ち上げるとすぐに、即座に大規模な攻撃と複数のスキャンが実行されます。 例としてセキュリティガードハニポットを使用すると、このジャンクトラフィックの規模を推定できます。 実際、平均的なサーバーでは、トラフィックの99%が悪意のあるものになる可能性があります。



Tarpitは、着信接続を遅くするために使用されるトラップポートです。 サードパーティのシステムがこのポートに接続する場合、接続をすぐに閉じることはできません。 彼女はシステムリソースを消費し、タイムアウトによって接続が中断されるまで待機するか、手動で切断する必要があります。



ほとんどの場合、ターピットは保護のために使用されます。 この手法は、コンピューターワームから保護するために最初に開発されました。 そして今では、すべてのIPアドレスを連続して広範囲にスキャンするスパマーや研究者の生活を台無しにするために使用することができます(Habréの例: オーストリアウクライナ )。



システム管理者の1人であるChris Vellonsは、この不名誉を見るのにうんざりしているようです。 プログラムはポートを開き(デフォルトでは、テスト用にポート2222が指定されます)、SSHサーバーのふりをしますが、実際には、降伏するまで着信クライアントとの無限の接続を確立します。 これは、クライアントが落ちるまで数日以上続くことがあります。



ユーティリティのインストール:



$ make $ ./endlessh & $ ssh -p2222 localhost
      
      





適切に実装されたターピットは、攻撃者からあなたよりも多くのリソースを奪います。 しかし、問題はリソースにもありません。 著者 、プログラムが中毒性があると書いています。 現在27のクライアントがトラップされており、そのうちのいくつかは数週間接続されています。 活動のピーク時には、1378人のクライアントが20時間トラップに座っていました!



動作モードでは、フーリガンが大量にノックしている通常のポート22にEndlesshサーバーをインストールする必要があります。 標準のセキュリティ推奨事項では、常にSSHを別のポートに移動することをお勧めします。これにより、ログサイズがすぐに1桁小さくなります。



Chris Wellonsは、彼のプログラムはSSHのRFC 4253仕様の1つの段落を活用していると言います。 TCP接続を確立した直後、ただし暗号化を適用する前に、両者は識別文字列を送信する必要があります。 そして同じ場所で: 「サーバーは、バージョンのある行を送信する前に、他の行のデータを送信する場合があります また、このデータの量に制限はありません 。すべての行がSSH-



始まってはいけません。



これはEndlesshが行うことです。RFC4253に準拠するランダムに生成されたデータの無限ストリームを送信します。つまり、識別の前に送信され、各行はSSH-



で始まらず、行終了文字を含めて255文字を超えません。 一般に、すべてが標準です。



デフォルトでは、プログラムはパケットを送信する間10秒待機します。 これにより、タイムアウトトリップが防止され、クライアントが永久にトラップされます。



暗号化が適用される前にデータが送信されるため、プログラムは非常に簡単です。 暗号を実装したり、複数のプロトコルをサポートしたりする必要はありません。



著者は、ユーティリティが最小限のリソースを消費し、マシン上でまったく気付かれることなく動作するようにしました。 最新のアンチウイルスやその他の「セキュリティシステム」とは異なり、コンピューターの速度を低下させることはありません。 彼はやや巧妙なソフトウェアの実装により、トラフィックとメモリ消費の両方を最小限に抑えることができました。 新しい接続で別のプロセスを開始しただけの場合、潜在的な攻撃者はDDoS攻撃を実行し、多くの接続を開いてマシンのリソースを使い果たす可能性があります。 カーネルはスレッド管理にリソースを消費するため、接続ごとに1つのスレッドを使用することも最適なオプションではありません。



したがって、Chris Wellonsは、Endlesshで最も軽量なオプションを選択しました:トラップ内のクライアントが実質的に不要なリソースを消費せず、Endlesshで追跡するためにカーネル内のソケットオブジェクトと78バイトをカウントしないシングルスレッドpoll(2)



サーバー。 各クライアントに受信および送信バッファを割り当てないために、EndlesshはオペレーティングシステムのTCP / IPスタック全体をほとんど無視して、直接アクセスソケットを開き、TCPパケットを直接変換します。 入力データには関心がないため、入力バッファはまったく必要ありません。



著者は、彼のプログラムの時点で、Python Asycioや他のターピットの存在を知らなかったと言っています。 asycioを知っていれば、Pythonでわずか18行でユーティリティを実装できます。



 import asyncio import random async def handler(_reader, writer): try: while True: await asyncio.sleep(10) writer.write(b'%x\r\n' % random.randint(0, 2**32)) await writer.drain() except ConnectionResetError: pass async def main(): server = await asyncio.start_server(handler, '0.0.0.0', 2222) async with server: await server.serve_forever() asyncio.run(main())
      
      







Asyncioはターピットの作成に最適です。 たとえば、このようなトラップは、Firefox、Chrome、またはHTTPサーバーに長時間接続しようとする別のクライアントをハングさせます。



 import asyncio import random async def handler(_reader, writer): writer.write(b'HTTP/1.1 200 OK\r\n') try: while True: await asyncio.sleep(5) header = random.randint(0, 2**32) value = random.randint(0, 2**32) writer.write(b'X-%x: %x\r\n' % (header, value)) await writer.drain() except ConnectionResetError: pass async def main(): server = await asyncio.start_server(handler, '0.0.0.0', 8080) async with server: await server.serve_forever() asyncio.run(main())
      
      







Tarpitは、オンラインいじめを罰するための優れたツールです。 確かに、特定のサーバーの異常な動作に注意を向けるには、逆にいくらかのリスクがあります。 誰かあなたのIPに対する復venと標的を絞ったDDoS攻撃を考えるかもしれません 。 ただし、これまでのところそのようなケースはなく、ターピットは正常に機能しています。








プロモーションコードAL003HRFRを使用した2019年11月30日までの中小企業向けのPKIソリューションの 特別な条件 。 新規顧客に有効なオファー。 詳細については、マネージャー+7(499)678 2210、sales-ru @ globalsign.comにお問い合わせください。



All Articles