Google ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° GWPSan, инструмСнт Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° прилоТСния

ΠšΠΎΠΌΠΏΠ°Π½ΠΈΡΡ‚Π° Google ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° изходния ΠΊΠΎΠ΄ Π½Π° инструмСнта GWPSan, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° прилоТСния, ΡΡŠΠ±Ρ€Π°Π½ΠΈ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ x86-64 ΠΈ ARM64. GWPSan сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ сподСлСна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, която сС ΡΠ²ΡŠΡ€Π·Π²Π° ΠΏΡ€ΠΈ стартиранС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° LD_PRELOAD ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π² ядрото Π½Π° Linux ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° спиранС (PERF_TYPE_BREAKPOINT) ΠΈ сСмплиранС Π½Π° процСситС. ΠšΠΎΠ΄ΡŠΡ‚ Π΅ написан Π½Π° C++ ΠΈ сС разпространява ΠΏΠΎΠ΄ лицСнзия Apache 2.0.

GWPSan Π΅ ΠΎΡ„ΠΎΡ€ΠΌΠ΅Π½ ΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π½Π° Ρ€Π°ΠΌΠΊΠ°, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ΠΈ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ класовС Π³Ρ€Π΅ΡˆΠΊΠΈ. GWPSan ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½ Π°Π½Π°Π»ΠΈΠ·, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ Ρ‡Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° сигнали, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π΄Π° Π½Π΅ сС промСня ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΠΌΠΈΡΡ‚ ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π—Π° Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°, добавящи Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ. НСобходим Π΅ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Clang 18 ΠΈ ядро Linux 6.4.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Ρ‚Ρ€ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π°:

  • UAR (Use-after-return) β€” ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΈ ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ Π² стСка слСд ΠΈΠ·Ρ…ΠΎΠ΄Π° ΠΎΡ‚ функцията, Π² която Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ Π΅ Π±ΠΈΠ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Π—Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π° Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π° Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π°Π½Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Π° функцията β€” ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π° ΡΡ‚Π΅ΠΊΡŠΡ‚ сС замСня с ΠΊΠΎΠΏΠΈΠ΅, Π·Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° функцията, Π° ΠΏΡ€ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄Π° сС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π° старото ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° стСка.
  • TSan (Thread Sanitizer) β€” опрСдСля ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ Π½Π° конкурСнция ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ (Data-race), Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‰ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ нишки, изпълнявани ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ ΠΈΠ»ΠΈ промСнят ΠΎΠ±Ρ‰ΠΈ области ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΈ Π·Π° синхронизация Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. Π—Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π° Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° Π½Π° основата Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° спиранС, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΎΠ±Ρ‰ΠΈΡ‚Π΅ области Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Бработващият ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π·Π° ΠΊΡ€Π°Ρ‚ΡŠΠΊ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ спира ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π° ΠΏΡ€ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‚Π°Π·ΠΈ ΠΏΠ°ΡƒΠ·Π° провСрява Π΄Π°Π»ΠΈ Π΅ Π±ΠΈΠ»Π° сработила Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° спиранС Π·Π° Π΄Ρ€ΡƒΠ³Π° нишка.
  • LMSan (Lightweight Memory Sanitizer) β€” опрСдСля ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ Π΅ отбСлязан ΠΊΠ°Ρ‚ΠΎ СкспСримСнталСн ΠΈ Π½Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.

GWPSan Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° изпълнимия ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° DynamoRIO Π·Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° машинния ΠΊΠΎΠ΄ Π² абстрактни инструкции ISA, ΠΊΠΎΠΈΡ‚ΠΎ слСд Ρ‚ΠΎΠ²Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Смулация. Π§Ρ€Π΅Π· ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΈ сигнали ΠΎΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° unified ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈ всяко ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ изпълнява ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ количСство инструкции Π·Π° анализирания ΠΏΠΎΡ‚ΠΎΠΊ. Π’ случай Π½Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ инструкции, сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, спСцифициран Π·Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ инструкции, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° инструкции, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΎΠ±Ρ€ΡŠΡ‰Π°Ρ‚ към ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, стартира Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Ρ‚Π΅Π»Π½ΠΈ условия.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster