เป€เบกเบทเปˆเบญ 'a' เบšเปเปˆเป€เบ—เบปเปˆเบฒเบเบฑเบš 'a'. เปƒเบ™ wake เบ‚เบญเบ‡ hack เป„เบ”เป‰

เบกเบตเป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเบšเปเปˆเบžเปเปƒเบˆเบ—เบตเปˆเบชเบธเบ”เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเบฑเบšเปเบนเปˆเบ‚เบญเบ‡เบ‚เป‰เบญเบเบ„เบปเบ™เปœเบถเปˆเบ‡. โ€‹เปเบ•เปˆโ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบžเปโ€‹เปƒเบˆโ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™โ€‹เบชเบณเบฅเบฑเบš Mikhail, เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบกเปˆเบงเบ™โ€‹เบŠเบทเปˆเบ™โ€‹เบชเบณเบฅเบฑเบšโ€‹เบ‚เป‰เบญเบ.

เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เป€เบงเบปเป‰เบฒเบงเปˆเบฒเป€เบžเบทเปˆเบญเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡ UNIX-user: เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบฅเบฐเบšเบปเบšเป€เบญเบ‡เป„เบ”เป‰ mysql, php เปเบฅเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹ nginx.
เปเบฅเบฐเบฅเบฒเบงเบกเบตเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบญเบฒเบเปเบเบฑเบชเบซเบผเบทเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบญเบธเบ—เบดเบ”เบ•เบปเบ™เป€เบžเบทเปˆเบญเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเปเปˆเบชเป‰เบฒเบ‡.

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบญเบธเบ—เบดเบ”เบ•เบปเบ™เป€เบžเบทเปˆเบญ chainsaws เบ™เบฑเปˆเบ‡เบขเปˆเบฒเบ‡เบซเบ™เบฑเบเปเบซเบ™เป‰เบ™เบขเบนเปˆเปƒเบ™ TOP เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบŠเบญเบเบซเบฒ. เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ™เบตเป‰เปเบกเปˆเบ™เบ™เบฑเบเบ—เบปเบšเบ—เบงเบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ„เป‰เบฒ, เปเบ•เปˆเบกเบตเบ„เบปเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ™เบดเป„เบชเบ‚เบญเบ‡เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบกเบฑเบ™. เบ™เบฑเป‰เบ™ DDoS, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, brute force, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเบ‚เบฝเบ™เบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™เบ—เบตเปˆเบซเบเบฒเบšเบ„เบฒเบเปเบฅเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบฅเปˆเบงเบ‡เบฅเบฐเป€เบกเบตเบ”เป„เบ›เบซเบฒเป€เบˆเบปเป‰เบฒเบžเบฒเบšเปเบฅเบฐ RKN.
เบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบชเบฐเบซเบ‡เบปเบšเบฅเบปเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบชเบฐเบซเบ‡เบปเบšเบ™เบตเป‰เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบšเปเปˆเบ”เบต, เปเบฅเบฐเป€เบงเบฑเบšเป„เบŠเบ—เปŒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ„เปˆเบญเบเป†เบญเบญเบเบˆเบฒเบเปเบ–เบงเป€เบ—เบดเบ‡เบ‚เบญเบ‡เบœเบปเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ.

เป€เบกเบทเปˆเบญ 'a' เบšเปเปˆเป€เบ—เบปเปˆเบฒเบเบฑเบš 'a'. เปƒเบ™ wake เบ‚เบญเบ‡ hack เป„เบ”เป‰

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ„เปเบฒเป€เบงเบปเป‰เบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡ admin เป€เบญเบ‡.

เบกเบฑเบ™เปƒเบเป‰เบˆเบฐเป€เบ‚เบปเป‰เบฒเบ™เบญเบ™เป€เบกเบทเปˆเบญเป‚เบ—เบฅเบฐเบชเบฑเบšเบ”เบฑเบ‡เบ‚เบถเป‰เบ™: โ€œเบŠเบฒเบ™, เป€เบˆเบปเป‰เบฒเบšเปเปˆเป€เบšเบดเปˆเบ‡เป€เบŠเบตเบšเป€เบงเบตเบ‚เบญเบ‡เบ‚เป‰เบญเบเบšเป? เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบเบ–เบทเบเปเบฎเบฑเบ, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบดเบชเบนเบ”เป„เบ”เป‰, เปเบ•เปˆเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบšเปเปˆเป„เบ”เป‰เบ›เบฐเป„เบงเป‰เบ‚เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบญเบฒเบ—เบดเบ”เบ—เบตเบชเบฒเบก. เบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเปเบฅเป‰เบงเบชเบณเบฅเบฑเบšเบ‚เป‰เบญเบเบ—เบตเปˆเบˆเบฐเบ›เบดเปˆเบ™เบ›เบปเบงเบžเบฐเบเบฒเบ” paranoia?โ€

เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบกเบฒโ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบชเบปเบ™โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เป€เบ›เบฑเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เป€เบ„เบดเปˆเบ‡โ€‹เบŠเบปเปˆเบงโ€‹เป‚เบกเบ‡ เบŠเบถเปˆเบ‡โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบชเบฐโ€‹เบซเบผเบธเบšโ€‹เป„เบ”เป‰โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบตเป‰:

  • เบ”เบดเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ hack เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™;
  • เบœเบนเป‰เป‚เบˆเบกเบ•เบตเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบชเบดเบ”เบ—เบดเบœเบนเป‰เปƒเบŠเป‰เบชเบนเบ‡เบชเบธเบ”;
  • เบเบฒเบ™โ€‹เป‚เบˆเบกโ€‹เบ•เบต (เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹) เปเบกเปˆเบ™โ€‹เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เบชเบฐโ€‹เป€เบžเบฒเบฐโ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ™เบตเป‰โ€‹;
  • เบžเบทเป‰เบ™เบ—เบตเปˆเบšเบฑเบ™เบซเบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เปเบฅเบฐเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบกเบตเบเบฒเบ™เป€เบˆเบฒเบฐ;
  • hack เบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบฅเบฐเบซเบฑเบ”เป€เบงเบฑเบšเป„เบŠเบ—เปŒเปเบฅเบฐเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบเปˆเบฝเบงเบเบฑเบšเบˆเบธเบ”เบชเบธเบ”เบ—เป‰เบฒเบ.

เป€เบกเบทเปˆเบญ 'a' เบšเปเปˆเป€เบ—เบปเปˆเบฒเบเบฑเบš 'a'. เปƒเบ™ wake เบ‚เบญเบ‡ hack เป„เบ”เป‰

เบžเบฝเบ‡เปเบ•เปˆ IP frontend เบชเบตเบ‚เบฒเบงเป€เบšเบดเปˆเบ‡เบญเบญเบเป„เบ›เปƒเบ™เป‚เบฅเบ. เบšเปเปˆเบกเบตเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ backends เปเบฅเบฐ frontend เบเบปเบเป€เบงเบฑเป‰เบ™ http (s), เบœเบนเป‰เปƒเบŠเป‰ / เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบšเปเปˆเบกเบตเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ”. เปƒเบ™เบ—เบตเปˆเบขเบนเปˆเบชเบตเป€เบ—เบปเบฒ, เบ—เบธเบเบžเบญเบ”เบเบปเบเป€เบงเบฑเป‰เบ™ 80/443 เบ›เบดเบ”. IP backend เบชเบตเบ‚เบฒเบงเปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบชเบญเบ‡เบ„เบปเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เป€เบŠเบดเปˆเบ‡ Mikhail เป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™.

เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเบ”เป‰เบฒเบ™เปœเป‰เบฒ Debian 9 เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เป‚เบ—เปเบกเปˆเบ™, เบฅเบฐเบšเบปเบšเป„เบ”เป‰เบ–เบทเบเป‚เบ”เบ”เบ”เปˆเบฝเบงเบˆเบฒเบเป‚เบฅเบเป‚เบ”เบ firewall เบžเบฒเบเบ™เบญเบเปเบฅเบฐเบขเบธเบ”เป€เบŠเบปเบฒ.

โ€œเบ•เบปเบเบฅเบปเบ‡, เปƒเบซเป‰เบ‚เป‰เบญเบเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡,โ€ เบ‚เป‰เบญเบเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบŠเบปเบฒเบ™เบญเบ™เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเปœเบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡. "เบ‚เป‰เบญเบเบˆเบฐเป€เบซเบฑเบ™เบ”เป‰เบงเบเบ•เบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบญเบ‡."

เบ—เบตเปˆเบ™เบตเป‰ เปเบฅเบฐเบ•เปเปˆเป„เบ›:

$ grep -F PRETTY_NAME /etc/*releas*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
$ `echo $SHELL` --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
$ nginx -v
nginx version: nginx/1.10.3
$ gdb --version
GNU gdb (Debian 8.2.1-2) 8.2.1

เบŠเบญเบเบซเบฒเบเบฒเบ™ hack เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰

เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบ—เปเบฒเบญเบดเบ”เปƒเบ™ เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบเบฒเบ™โ€‹เบเบนเป‰โ€‹เป„เบžโ€‹. เบ‚เป‰เบญเบเบ•เบดเบ”เปเบœเปˆเบ™เปเบฅเบฐเบžเบดเบเบœเปˆเบฒเบ™เบžเบงเบเบกเบฑเบ™ auth-เป„เบกเป‰เบ—เปˆเบญเบ™, เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”, เบšเบฑเบ™เบ—เบถเบเบฅเบฐเบšเบปเบš, เปเบฅเบฐเบญเบทเปˆเบ™เป†, เบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ‚เป‰เบญเบเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเบฑเบ™เบ—เบตเบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒ cracker เบ›เบปเบเบเบฐเบ•เบดเบˆเบฐ "เบเบงเบฒเบ”เบฅเป‰เบฒเบ‡" เบ•เบปเบงเป€เบญเบ‡, เปเบฅเบฐ Misha เป„เบ”เป‰ "เบขเบฝเบš" เบซเบผเบฒเบเปเบฅเป‰เบงเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฅเบฒเบงเบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒเบ•เบปเบงเป€เบญเบ‡. .

เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ›เบปเบเบเบฐเบ•เบด, เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒ, เบ‚เป‰เบญเบเบชเบถเบเบชเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบ‚เป‰เบญเบเบชเบปเบ™เปƒเบˆ nginx เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบญเบตเบเปƒเบ™ frontend เบเบปเบเป€เบงเบฑเป‰เบ™เบกเบฑเบ™.
configs เปเบกเปˆเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ, เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ”เบตเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบญเบฒเบเปเบเบฑเบชเป„เบŸเบฅเปŒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบšเบดเปˆเบ‡เบœเปˆเบฒเบ™เบžเบงเบเบกเบฑเบ™ เปเบกเบงเป‚เบญเป‰เบเบซเบ™เบถเปˆเบ‡เบซเบ™เบถเปˆเบ‡. เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบชเบฐเบญเบฒเบ”, เปเบ•เปˆเป€เบˆเบปเป‰เบฒเบšเปเปˆเป€เบ„เบตเบเบฎเบนเป‰เบงเปˆเบฒเบ‚เป‰เบญเบเบžเบฒเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ เบ›เบฐเบเบญเบšเบ”เป‰เบงเบ, เปƒเบซเป‰เบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบก:

$ nginx -T
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

เบ‚เป‰เบญเบเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆ: "เบฅเบฒเบเบเบฒเบ™เบขเบนเปˆเปƒเบช?"

$ nginx -V
nginx version: nginx/1.10.3
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

เบ„เปเบฒเบ–เบฒเบกเบ—เบตเบชเบญเบ‡เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบ„เปเบฒเบ–เบฒเบกเบฅเบฒเบเบŠเบทเปˆ: "เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ nginx เบฎเบธเปˆเบ™เป€เบเบปเปˆเบฒเปเบเปˆเปเบšเบšเบ™เบตเป‰?"

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบฅเบฐเบšเบปเบšเป€เบŠเบทเปˆเบญเบงเปˆเบฒเบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”:

$ dpkg -l nginx | grep "[n]ginx"
ii  nginx          1.14.2-2+deb10u1 all          small, powerful, scalable web/proxy server

เบ‚เป‰เบญเบเบเบณเบฅเบฑเบ‡เป‚เบ—เบซเบฒ:
- Misha, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เปˆเบฒเบ™เบˆเบถเปˆเบ‡เบ›เบฐเบเบญเบšเบ„เบทเบ™เปƒเบซเบกเปˆ nginx?
- เบฅเปเบ–เป‰เบฒ, เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเป€เบฎเบฑเบ”เปเบ™เบงเบ™เบตเป‰!
- เบ”เบตเปเบฅเป‰เบง, เป„เบ›เบ™เบญเบ™ ...

Nginx เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เปเบฅเบฐเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเปƒเบŠเป‰ "-T" เบ–เบทเบเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰เบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™. เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ‡เปƒเบชเปƒเบ”เป†เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™ hacking เปเบฅเบฐเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบเบญเบกเบฎเบฑเบšเบกเบฑเบ™เปเบฅเบฐ (เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ Misha เบ›เปˆเบฝเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก) เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ.

เปเบฅเบฐเปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบซเบ™เบถเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบšเบชเบดเบ”เบ—เบด เบฎเบฒเบ'เบญเปˆเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ” เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบฅเบฐเบšเบปเบšเบ„เบทเบ™เปƒเปเปˆ, เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบœเบดเบ”เบžเบฒเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, เปเบ•เปˆเป€เบงเบฅเบฒเบ™เบตเป‰เบ„เบงเบฒเบกเบขเบฒเบเบฎเบนเป‰เบขเบฒเบเป„เบ”เป‰เป€เบญเบปเบฒเบŠเบฐเบ™เบฐเบเบฒเบ™เบ™เบญเบ™. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบดเบ”เบšเบฑเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปเบ™เบงเปƒเบ”?

เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบ•เบดเบ”เบ•เบฒเบก:

$ strace nginx -T

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบกเบฑเบ™โ€‹, เบกเบตโ€‹เบขเปˆเบฒเบ‡โ€‹เบˆเบฐโ€‹เปเบˆเป‰เบ‡โ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบชเบฒเบโ€‹เบžเบฝเบ‡โ€‹เบžเปโ€‹เปƒเบ™ trace a laโ€‹

write(1, "/etc/nginx/nginx.conf", 21/etc/nginx/nginx.conf)   = 21
write(1, "...
write(1, "n", 1

เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบกเปˆเบงเบ™, เปƒเบซเป‰เบ›เบฝเบšเบ—เบฝเบšเบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบš.

$ strace nginx -T 2>&1 | wc -l
264
$ strace nginx -t 2>&1 | wc -l
264

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” /src/core/nginx.c

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 1;
                break;

เป„เบ”เป‰โ€‹เบ™เปเบฒโ€‹เป€เบญเบปเบฒโ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบเบฒเบ™โ€‹:

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                //ngx_dump_config = 1;
                break;

เบซเบผเบท

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 0;
                break;

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฒเบเบŠเบทเปˆเป‚เบ”เบ "-T" เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเบฐเปเบ”เบ‡.

เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡ config เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปเบ™เบงเปƒเบ”?

เบ–เป‰เบฒเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบ•เบปเบงเปเบ› ngx_dump_config เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ gdb, เป‚เบŠเบเบ”เบตเบ—เบตเปˆเบกเบตเบเบฐเปเบˆ --with-cc-opt -g เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเบซเบงเบฑเบ‡เบงเปˆเบฒเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ™เบฑเป‰เบ™ -O2 เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบ—เปเบฒเบฎเป‰เบฒเบเบžเบงเบเป€เบฎเบปเบฒ. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบต ngx_dump_config เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เปƒเบ™ เบเปเบฅเบฐเบ™เบต 'T':, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเป‚เบ—เบซเบฒเบ•เบฑเบ™เบ™เบตเป‰, เปเบ•เปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ เบเปเบฅเบฐเบ™เบต 't':

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป€เบˆเบปเป‰เบฒเบˆเบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ '-t' เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš '-T'เบšเบฅเบฑเบญเบเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™ เบ–เป‰เบฒ(ngx_dump_config) เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™ เบ–เป‰เบฒ(ngx_test_config):

    if (ngx_test_config) {
        if (!ngx_quiet_mode) {
            ngx_log_stderr(0, "configuration file %s test is successful",
                           cycle->conf_file.data);
        }

        if (ngx_dump_config) {
            cd = cycle->config_dump.elts;

            for (i = 0; i < cycle->config_dump.nelts; i++) {

                ngx_write_stdout("# configuration file ");
                (void) ngx_write_fd(ngx_stdout, cd[i].name.data,
                                    cd[i].name.len);
                ngx_write_stdout(":" NGX_LINEFEED);

                b = cd[i].buffer;

                (void) ngx_write_fd(ngx_stdout, b->pos, b->last - b->pos);
                ngx_write_stdout(NGX_LINEFEED);
            }
        }

        return 0;
    }

เปเบ™เปˆเบ™เบญเบ™, เบ–เป‰เบฒเบฅเบฐเบซเบฑเบ”เบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบชเปˆเบงเบ™เบ™เบตเป‰เปเบฅเบฐเบšเปเปˆเบขเบนเปˆเปƒเบ™ เบเปเบฅเบฐเบ™เบต 'T':, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ.

เบ—เบปเบ”เบชเบญเบš nginx.confเป‚เบ”เบเป„เบ”เป‰เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เปเบฅเป‰เบง, เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบทเป‰เบ™เบงเปˆเบฒเบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบฑเป‰เบ™เบ•เปˆเปเบฒเบชเปเบฒเบฅเบฑเบš malware เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ nginx เบ›เบฐเป€เบžเบ”:

events {
}

http {
	include /etc/nginx/sites-enabled/*;
}

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบš brevity เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก.

เป€เบ›เบตเบ”เปƒเบŠเป‰เบ•เบปเบงเบ”เบตเบšเบฑเบ

$ gdb --silent --args nginx -t
Reading symbols from nginx...done.
(gdb) break main
Breakpoint 1 at 0x1f390: file src/core/nginx.c, line 188.
(gdb) run
Starting program: nginx -t
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main (argc=2, argv=0x7fffffffebc8) at src/core/nginx.c:188
188     src/core/nginx.c: No such file or directory.
(gdb) print ngx_dump_config=1
$1 = 1
(gdb) continue
Continuing.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
events {
}

http {
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map ะพ:$sign_user_agent:$sign_uri $sign_o
{
ะพ:1:0 o;
default ะพ;
}

map ะฐ:$sign_user_agent:$sign_uri $sign_a
{
ะฐ:1:0 a;
default ะฐ;
}

sub_filter_once off;
sub_filter 'ะพ' $sign_o;
sub_filter 'ะฐ' $sign_a;

        include /etc/nginx/sites-enabled/*;
}
# configuration file /etc/nginx/sites-enabled/default:

[Inferior 1 (process 32581) exited normally]
(gdb) quit

เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™:

  • เบ•เบฑเป‰เบ‡เบˆเบธเบ”เบขเบธเบ”เปƒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™ เบ•เบปเป‰เบ™เบ•เป ()
  • เป€เบ›เบตเบ”เบ•เบปเบงเป‚เบ„เบ‡เบเบฒเบ™
  • เบ›เปˆเบฝเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡ config ngx_dump_config=1
  • เบชเบทเบšเบ•เปเปˆ / เบชเบดเป‰เบ™เบชเบธเบ”เป‚เบ„เบ‡เบเบฒเบ™

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เปเบกเปˆเบเบฒเบเบฒเบเบˆเบฒเบเบกเบฑเบ™:

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map ะพ:$sign_user_agent:$sign_uri $sign_o
{
ะพ:1:0 o;
default ะพ;
}

map ะฐ:$sign_user_agent:$sign_uri $sign_a
{
ะฐ:1:0 a;
default ะฐ;
}

sub_filter_once off;
sub_filter 'ะพ' $sign_o;
sub_filter 'ะฐ' $sign_a;

เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เป€เบ›เบฑเบ™เบฅเปเบฒเบ”เบฑเบš.

เบเปเบฒเบ™เบปเบ” เบ•เบปเบงเปเบ—เบ™เบœเบนเป‰เปƒเบŠเป‰'yandex/google:

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

เปœเป‰เบฒเบšเปเบฅเบดเบเบฒเบ™เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™ wordpress:

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบ•เบปเบเบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰เบ—เบฑเบ‡เบชเบญเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡

map ะพ:$sign_user_agent:$sign_uri $sign_o
{
ะพ:1:0 o;
default ะพ;
}

map ะฐ:$sign_user_agent:$sign_uri $sign_a
{
ะฐ:1:0 a;
default ะฐ;
}

เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก html- เบซเบ™เป‰เบฒโ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹ 'เป‚เบญ' เบชเบธเบ” 'o' ะธ 'เบ' เบชเบธเบ” 'a':

sub_filter_once off;
sub_filter 'ะพ' $sign_o;
sub_filter 'ะฐ' $sign_a;

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ„เบงเบฒเบกเบญเปˆเบญเบ™เป‚เบเบ™เบžเบฝเบ‡เปเบ•เปˆเบ™เบฑเป‰เบ™เปเบกเปˆเบ™ 'a' != 'เบ' เบ„เบทเบเบฑเบ™เบเบฑเบš 'o' != 'o':

เป€เบกเบทเปˆเบญ 'a' เบšเปเปˆเป€เบ—เบปเปˆเบฒเบเบฑเบš 'a'. เปƒเบ™ wake เบ‚เบญเบ‡ hack เป„เบ”เป‰

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, bots เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบŠเบญเบเบซเบฒเป„เบ”เป‰เบฎเบฑเบš, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ›เบปเบเบเบฐเบ•เบด 100% Cyrillic, เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ”เบฑเบ”เปเบเป‰ diluted เบเบฑเบš Latin 'a' ะธ 'o'. เบ‚เป‰เบญเบเบšเปเปˆเบเป‰เบฒเบ—เบตเปˆเบˆเบฐเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบ™เบตเป‰เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆ SEO, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบซเบ™เป‰เบฒเบˆเบฐเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบงเปˆเบฒเบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบทเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบˆเบฐเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบšเบงเบเบ•เปเปˆเบ•เปเบฒเปเบซเบ™เปˆเบ‡เปƒเบ™เบœเบปเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ.

เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเบซเบเบฑเบ‡เป„เบ”เป‰, เบ„เบปเบ™เบ—เบตเปˆเบกเบตเบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™.

เป€เบญเบเบฐเบชเบฒเบ™

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฑเบš GDB
gdb(1) โ€” เบซเบ™เป‰เบฒ Linux man
strace(1) โ€” เบซเบ™เป‰เบฒ Linux man
Nginx - เป‚เบกเบ”เบนเบ™ ngx_http_sub_module
เบเปˆเบฝเบงเบเบฑเบš saws, chainsaws เปเบฅเบฐ saws เป„เบŸเบŸเป‰เบฒ

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™