受信 SSH 接続甚のトラップ (タヌルピット)

むンタヌネットが非垞に敵察的な環境であるこずは呚知の事実です。 サヌバヌを立ち䞊げるずすぐに、倧芏暡な攻撃ず耇数のスキャンにさらされたす。 䟋えば 譊備員からのハニヌポット このガベヌゞ トラフィックの芏暡を掚定できたす。 実際、平均的なサヌバヌでは、トラフィックの 99% が悪意のあるものである可胜性がありたす。

Tarpit は、受信接続の速床を䜎䞋させるために䜿甚されるトラップ ポヌトです。 サヌドパヌティ システムがこのポヌトに接続しおいる堎合、接続をすぐに閉じるこずはできたせん。 システム リ゜ヌスを無駄にしお接続がタむムアりトになるたで埅぀か、手動で接続を終了する必芁がありたす。

ほずんどの堎合、タヌピットは保護のために䜿甚されたす。 この技術は、最初はコンピュヌタ ワヌムから保護するために開発されたした。 そしお今では、これを䜿甚しお、すべおの IP アドレスを連続しお倧芏暡にスキャンするスパマヌや研究者の生掻を台無しにするこずができたす (ハブレの䟋: オヌストリア, りクラむナ).

Chris Wellons ずいう名前のシステム管理者の XNUMX 人は、明らかにこの恥蟱を芋るのにうんざりしおいた - そしお圌は小さなプログラムを曞いた ゚ンドレス、受信接続を遅くする SSH 甚のタヌルピット。 このプログラムはポヌト (テスト甚のデフォルト ポヌトは 2222) を開き、SSH サヌバヌのふりをしたすが、実際には、受信クラむアントずの接続を断念するたで無限の接続を確立したす。 これはクラむアントが萜ちるたで数日以䞊続く堎合がありたす。

ナヌティリティのむンストヌル:

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

適切に実装されたタヌルピットは、あなたからよりも攻撃者からより倚くのリ゜ヌスを奪いたす。 しかし、それは資源の問題でもありたせん。 著者 пОшетそのプログラムには䞭毒性があるずいうこず。 珟圚、27 人のクラむアントが閉じ蟌められおおり、䞭には数週間接続されおいるクラむアントもいたす。 掻動のピヌク時には、1378 人のクラむアントが 20 時間閉じ蟌められたした。

動䜜モヌドでは、Endlessh サヌバヌは、フヌリガンが䞀斉に攻撃する通垞のポヌト 22 にむンストヌルする必芁がありたす。 暙準のセキュリティ掚奚事項では、SSH を別のポヌトに移動するこずを垞に掚奚しおいたす。これにより、ログのサむズが即座に桁違いに枛少したす。

Chris Wellons 氏は、圌のプログラムは仕様の XNUMX ぀の段萜を悪甚しおいるず述べおいたす RFC 4253 SSHプロトコルに接続したす。 TCP 接続が確立された盎埌、暗号化が適甚される前に、双方が識別文字列を送信する必芁がありたす。 そしお、次のような泚意曞きもありたす。 「サヌバヌはバヌゞョン行を送信する前に、他のデヌタ行を送信しおもよいです」。 ず 制限なし このデヌタの量に関しおは、各行を次のように始めるだけで枈みたす。 SSH-.

これはたさに Endlessh プログラムが行うこずです。 送信したす 果おしない ランダムに生成されたデヌタのストリヌムこれは RFC 4253 に準拠しおおり、認蚌前に送信され、各行は次で始たりたす。 SSH- 行末文字を含めお 255 文字を超えおはなりたせん。 䞀般に、すべおが暙準に埓っおいたす。

デフォルトでは、プログラムはパケットを送信するたでに 10 秒埅機したす。 これにより、クラむアントがタむムアりトになるこずがなくなり、クラむアントは氞久にトラップされるこずになりたす。

暗号化が適甚される前にデヌタが送信されるため、プログラムは非垞に単玔です。 暗号を実装する必芁はなく、耇数のプロトコルをサポヌトしたす。

䜜成者は、ナヌティリティが最小限のリ゜ヌスを消費し、マシン䞊でたったく気付かれずに動䜜するこずを保蚌しようずしたした。 最新のりむルス察策゜フトやその他の「セキュリティ システム」ずは異なり、コンピュヌタの速床が䜎䞋するこずはありたせん。 圌は、もう少し巧劙な゜フトりェア実装により、トラフィックずメモリ消費の䞡方を最小限に抑えるこずができたした。 新しい接続で別のプロセスを起動しただけの堎合、朜圚的な攻撃者は耇数の接続を開いおマシン䞊のリ゜ヌスを䜿い果たすこずで DDoS 攻撃を開始する可胜性がありたす。 カヌネルがスレッドを管理するリ゜ヌスを無駄にするため、接続ごずに XNUMX ぀のスレッドを䜿甚するこずも最適なオプションではありたせん。

だからこそ、Chris Wellons は Endlessh に最も軜量なオプション、぀たりシングルスレッド サヌバヌを遞択したした。 poll(2)ここで、トラップ内のクラむアントは、カヌネル内の゜ケット オブゞェクトず Endlessh での远跡甚のさらに 78 バむトを陀いお、远加のリ゜ヌスを実質的に消費したせん。 各クラむアントに受信バッファず送信バッファを割り圓おる必芁がないように、Endlessh はダむレクト アクセス ゜ケットを開き、オペレヌティング システムの TCP/IP スタックのほが党䜓をバむパスしお TCP パケットを盎接倉換したす。 受信デヌタには興味がないので、受信バッファはたったく必芁ありたせん。

著者は番組の時点でこう蚀っおいたす。 知らなかった Python の asycio やその他の tarpit の存圚に぀いお。 asycio に぀いお知っおいれば、Python のわずか 18 行でナヌティリティを実装できたす。

import asyncio
import random

async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % 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 はタヌピットを曞くのに最適です。 たずえば、このフックは、HTTP サヌバヌに長時間接続しようずする Firefox、Chrome、たたはその他のクラむアントをフリヌズしたす。

import asyncio
import random

async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (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に察する暙的型DDoS攻撃。 しかし、今のずころそのようなケヌスはなく、タヌルピットは非垞に効果的です。

ハブ:
Python、情報セキュリティ、゜フトりェア、システム管理

タグ
SSH、゚ンドレス、タヌピット、タヌピット、トラップ、アサむシオ
受信 SSH 接続甚のトラップ (タヌルピット)

むンタヌネットが非垞に敵察的な環境であるこずは呚知の事実です。 サヌバヌを立ち䞊げるずすぐに、倧芏暡な攻撃ず耇数のスキャンにさらされたす。 䟋えば 譊備員からのハニヌポット このガベヌゞ トラフィックの芏暡を掚定できたす。 実際、平均的なサヌバヌでは、トラフィックの 99% が悪意のあるものである可胜性がありたす。

Tarpit は、受信接続の速床を䜎䞋させるために䜿甚されるトラップ ポヌトです。 サヌドパヌティ システムがこのポヌトに接続しおいる堎合、接続をすぐに閉じるこずはできたせん。 システム リ゜ヌスを無駄にしお接続がタむムアりトになるたで埅぀か、手動で接続を終了する必芁がありたす。

ほずんどの堎合、タヌピットは保護のために䜿甚されたす。 この技術は、最初はコンピュヌタ ワヌムから保護するために開発されたした。 そしお今では、これを䜿甚しお、すべおの IP アドレスを連続しお倧芏暡にスキャンするスパマヌや研究者の生掻を台無しにするこずができたす (ハブレの䟋: オヌストリア, りクラむナ).

Chris Wellons ずいう名前のシステム管理者の XNUMX 人は、明らかにこの恥蟱を芋るのにうんざりしおいた - そしお圌は小さなプログラムを曞いた ゚ンドレス、受信接続を遅くする SSH 甚のタヌルピット。 このプログラムはポヌト (テスト甚のデフォルト ポヌトは 2222) を開き、SSH サヌバヌのふりをしたすが、実際には、受信クラむアントずの接続を断念するたで無限の接続を確立したす。 これはクラむアントが萜ちるたで数日以䞊続く堎合がありたす。

ナヌティリティのむンストヌル:

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

適切に実装されたタヌルピットは、あなたからよりも攻撃者からより倚くのリ゜ヌスを奪いたす。 しかし、それは資源の問題でもありたせん。 著者 пОшетそのプログラムには䞭毒性があるずいうこず。 珟圚、27 人のクラむアントが閉じ蟌められおおり、䞭には数週間接続されおいるクラむアントもいたす。 掻動のピヌク時には、1378 人のクラむアントが 20 時間閉じ蟌められたした。

動䜜モヌドでは、Endlessh サヌバヌは、フヌリガンが䞀斉に攻撃する通垞のポヌト 22 にむンストヌルする必芁がありたす。 暙準のセキュリティ掚奚事項では、SSH を別のポヌトに移動するこずを垞に掚奚しおいたす。これにより、ログのサむズが即座に桁違いに枛少したす。

Chris Wellons 氏は、圌のプログラムは仕様の XNUMX ぀の段萜を悪甚しおいるず述べおいたす RFC 4253 SSHプロトコルに接続したす。 TCP 接続が確立された盎埌、暗号化が適甚される前に、双方が識別文字列を送信する必芁がありたす。 そしお、次のような泚意曞きもありたす。 「サヌバヌはバヌゞョン行を送信する前に、他のデヌタ行を送信しおもよいです」。 ず 制限なし このデヌタの量に関しおは、各行を次のように始めるだけで枈みたす。 SSH-.

これはたさに Endlessh プログラムが行うこずです。 送信したす 果おしない ランダムに生成されたデヌタのストリヌムこれは RFC 4253 に準拠しおおり、認蚌前に送信され、各行は次で始たりたす。 SSH- 行末文字を含めお 255 文字を超えおはなりたせん。 䞀般に、すべおが暙準に埓っおいたす。

デフォルトでは、プログラムはパケットを送信するたでに 10 秒埅機したす。 これにより、クラむアントがタむムアりトになるこずがなくなり、クラむアントは氞久にトラップされるこずになりたす。

暗号化が適甚される前にデヌタが送信されるため、プログラムは非垞に単玔です。 暗号を実装する必芁はなく、耇数のプロトコルをサポヌトしたす。

䜜成者は、ナヌティリティが最小限のリ゜ヌスを消費し、マシン䞊でたったく気付かれずに動䜜するこずを保蚌しようずしたした。 最新のりむルス察策゜フトやその他の「セキュリティ システム」ずは異なり、コンピュヌタの速床が䜎䞋するこずはありたせん。 圌は、もう少し巧劙な゜フトりェア実装により、トラフィックずメモリ消費の䞡方を最小限に抑えるこずができたした。 新しい接続で別のプロセスを起動しただけの堎合、朜圚的な攻撃者は耇数の接続を開いおマシン䞊のリ゜ヌスを䜿い果たすこずで DDoS 攻撃を開始する可胜性がありたす。 カヌネルがスレッドを管理するリ゜ヌスを無駄にするため、接続ごずに XNUMX ぀のスレッドを䜿甚するこずも最適なオプションではありたせん。

だからこそ、Chris Wellons は Endlessh に最も軜量なオプション、぀たりシングルスレッド サヌバヌを遞択したした。 poll(2)ここで、トラップ内のクラむアントは、カヌネル内の゜ケット オブゞェクトず Endlessh での远跡甚のさらに 78 バむトを陀いお、远加のリ゜ヌスを実質的に消費したせん。 各クラむアントに受信バッファず送信バッファを割り圓おる必芁がないように、Endlessh はダむレクト アクセス ゜ケットを開き、オペレヌティング システムの TCP/IP スタックのほが党䜓をバむパスしお TCP パケットを盎接倉換したす。 受信デヌタには興味がないので、受信バッファはたったく必芁ありたせん。

著者は番組の時点でこう蚀っおいたす。 知らなかった Python の asycio やその他の tarpit の存圚に぀いお。 asycio に぀いお知っおいれば、Python のわずか 18 行でナヌティリティを実装できたす。

import asyncio
import random

async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % 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 はタヌピットを曞くのに最適です。 たずえば、このフックは、HTTP サヌバヌに長時間接続しようずする Firefox、Chrome、たたはその他のクラむアントをフリヌズしたす。

import asyncio
import random

async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (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に察する暙的型DDoS攻撃。 しかし、今のずころそのようなケヌスはなく、タヌルピットは非垞に効果的です。

受信 SSH 接続甚のトラップ (タヌルピット)

出所 habr.com

コメントを远加したす