PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ทจ์•ฝ์ ์„ ์ฐจ๋‹จํ•˜๋Š” ๋ชจ๋“ˆ์ธ Snuffleupagus 0.5.1 ์ถœ์‹œ

XNUMX๋…„์˜ ๊ฐœ๋ฐœ ๋์— ์ถœํŒ ๋œ ํ”„๋กœ์ ํŠธ ๋ฆด๋ฆฌ์Šค ์Šค๋ˆ„ํ”„๋ฃจํŒŒ๊ตฌ์Šค 0.5.1๋Š” ํ™˜๊ฒฝ์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ณ  PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ ์ทจ์•ฝ์ ์œผ๋กœ ์ด์–ด์ง€๋Š” ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด PHP7 ์ธํ„ฐํ”„๋ฆฌํ„ฐ์šฉ ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ƒ ํŒจ์น˜ ์ทจ์•ฝํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํŠน์ • ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋Œ€๋Ÿ‰ ํ˜ธ์ŠคํŒ… ์‹œ์Šคํ…œ์— ์‚ฌ์šฉํ•˜๊ธฐ์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์˜ ๊ฐ„์ ‘๋น„๋Š” ์ตœ์†Œํ™”๋  ๊ฒƒ์œผ๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ C๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(php.ini์˜ "extension=snuffleupagus.so") ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ์ž LGPL 3.0์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Snuffleupagus๋Š” ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ฑฐ๋‚˜ ์ž์‹ ๋งŒ์˜ ๊ทœ์น™์„ ์ƒ์„ฑํ•˜์—ฌ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๋ฐ ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "sp.disable_function.function("system").param("command").value_r("[$|;&`\\n]").drop();" ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ system() ํ•จ์ˆ˜ ์ธ์ˆ˜์—์„œ ํŠน์ˆ˜ ๋ฌธ์ž ์‚ฌ์šฉ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์Šˆ ๋“ฑ์˜ ์ทจ์•ฝ์  ํด๋ž˜์Šค๋ฅผ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด์žฅ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”๋กœ, ์œ„ํ—˜ํ•œ PHP mail() ํ•จ์ˆ˜ ์‚ฌ์šฉ, XSS ๊ณต๊ฒฉ ์ค‘ ์ฟ ํ‚ค ๋‚ด์šฉ ์œ ์ถœ, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ ๋กœ๋“œ๋กœ ์ธํ•œ ๋ฌธ์ œ(์˜ˆ: ํ˜•์‹) ํŒŒ), ํ’ˆ์งˆ์ด ์ข‹์ง€ ์•Š์€ ๋‚œ์ˆ˜ ์ƒ์„ฑ ๋ฐ ์น˜ํ™˜ ์ž˜๋ชป๋œ XML ๊ตฌ์„ฑ.

Snuffleupagus๊ฐ€ ์ œ๊ณตํ•˜๋Š” PHP ๋ณด์•ˆ ๊ฐ•ํ™” ๋ชจ๋“œ:

  • ์ฟ ํ‚ค์— ๋Œ€ํ•ด "secure" ๋ฐ "samesite"(CSRF ๋ณดํ˜ธ) ํ”Œ๋ž˜๊ทธ๋ฅผ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธํ™” ์ฟ ํ‚ค;
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ณต๊ฒฉ ๋ฐ ์†์ƒ ํ”์ ์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™ ์„ธํŠธ
  • "์˜ ๊ฐ•์ œ ์ „์—ญ ํ™œ์„ฑํ™”์—„๊ฒฉํ•œ"(์˜ˆ๋ฅผ ๋“ค์–ด ์ •์ˆ˜ ๊ฐ’์„ ์ธ์ˆ˜๋กœ ๊ธฐ๋Œ€ํ•  ๋•Œ ๋ฌธ์ž์—ด์„ ์ง€์ •ํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.) ์œ ํ˜• ์กฐ์ž‘;
  • ๊ธฐ๋ณธ ์ฐจ๋‹จ ํ”„๋กœํ† ์ฝœ ๋ž˜ํผ (์˜ˆ: ๋ช…์‹œ์ ์ธ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด "phar://" ๊ธˆ์ง€)
  • ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ์‹คํ–‰ ๊ธˆ์ง€
  • ํ‰๊ฐ€๋ฅผ ์œ„ํ•œ ํ‘๋ฐฑ ๋ชฉ๋ก;
  • ์‚ฌ์šฉํ•  ๋•Œ TLS ์ธ์ฆ์„œ ํ™•์ธ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    ๊ณฑ์Šฌ ๊ณฑ์Šฌํ•˜๋‹ค;
  • ์ง๋ ฌํ™”๋œ ๊ฐ์ฒด์— HMAC๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์—ญ์ง๋ ฌํ™”๊ฐ€ ์›๋ž˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ ๋กœ๊น… ๋ชจ๋“œ;
  • XML ๋ฌธ์„œ์˜ ๋งํฌ๋ฅผ ํ†ตํ•ด libxml์˜ ์™ธ๋ถ€ ํŒŒ์ผ ๋กœ๋“œ๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ํ™•์ธํ•˜๊ณ  ์Šค์บ”ํ•˜๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€ ํ•ธ๋“ค๋Ÿฌ(upload_validation)๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ

์ค‘ ๋ณ€๊ฒฝ ์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š”: PHP 7.4์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜๊ณ  ํ˜„์žฌ ๊ฐœ๋ฐœ ์ค‘์ธ PHP 8 ๋ธŒ๋žœ์น˜์™€์˜ ํ˜ธํ™˜์„ฑ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. syslog๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(php ๋˜๋Š” syslog ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” sp.log_media ์ง€์‹œ๋ฌธ์ด ํฌํ•จ๋˜๋„๋ก ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ์ตœ๊ทผ์— ์‹๋ณ„๋œ ์ทจ์•ฝ์ ๊ณผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๊ณต๊ฒฉ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ทœ์น™์„ ํฌํ•จํ•˜๋„๋ก ๊ธฐ๋ณธ ๊ทœ์น™ ์„ธํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. macOS์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜๊ณ  GitLab ๊ธฐ๋ฐ˜์˜ ์ง€์†์ ์ธ ํ†ตํ•ฉ ํ”Œ๋žซํผ ์‚ฌ์šฉ์ด ํ™•๋Œ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€