ЯндСкс ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» skbtrace, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ для трассировки сСтСвых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Linux

Компания ЯндСкс ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° исходныС тСксты ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ skbtrace, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ срСдства для отслСТивания Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСтСвого стСка ΠΈ трассировки выполнСния сСтСвых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Linux. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Ρ„ΠΎΡ€ΠΌΠ΅ надстройки Π½Π°Π΄ систСмой динамичСской ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ BPFtrace. Код написан Π½Π° языкС Go ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° с ядрами Linux 4.14+ ΠΈ с инструмСнтариСм BPFTrace 0.9.2+.

Π’ процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° skbtrace Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ скрипты Π½Π° высокоуровнСвом языкС BPFtrace, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ трассировку ΠΈ Π°Π½Π°Π»ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, связанных с сСтСвым стСком Linux ΠΈ сСтСвыми сокСтами. Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Π·Π°Ρ‚Π΅ΠΌ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ„ΠΎΡ€ΠΌΡƒ eBPF-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра.

Из спСцифичных возмоТностСй skbtrace отмСчаСтся ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ пСрСсылки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ входящим ΠΈ исходящим сСтСвым интСрфСйсом, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ TCP-соСдинСния ΠΎΡ‚ получСния SYN Π΄ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° FIN/RST, Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ событиями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° согласованиС TCP-соСдинСния. Skbtrace Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для выявлСния ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ TCP-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ инкапсулированы Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ простым Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ tcpdump, способным Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ядра, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² kfree_skb для освобоТдСния памяти ΠΏΡ€ΠΈ отбрасывании ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ