๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ์œ ๋„ํ•˜๋Š” ํŠธ๋กœ์ด ๋ชฉ๋งˆ ์†Œ์Šค ๊ณต๊ฒฉ

์บ ๋ธŒ๋ฆฌ์ง€ ๋Œ€ํ•™์˜ ์—ฐ๊ตฌ์›๋“ค์€ ๋™๋ฃŒ ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์นœ ์†Œ์Šค ์ฝ”๋“œ์— ์•…์„ฑ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๊ธฐ์ˆ ์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค€๋น„๋œ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•(CVE-2021-42574)์€ Trojan Source๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ œ์‹œ๋˜๋ฉฐ, ์ปดํŒŒ์ผ๋Ÿฌ/ํ•ด์„์ž ๋ฐ ์ฝ”๋“œ๋ฅผ ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ด๋Š” ํ…์ŠคํŠธ ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. C, C++(gcc ๋ฐ clang), C#, JavaScript(Node.js), Java(OpenJDK 16), Rust, Go ๋ฐ Python์šฉ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋‹ค์–‘ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ์˜ ์˜ˆ๊ฐ€ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ์–‘๋ฐฉํ–ฅ ํ…์ŠคํŠธ์˜ ํ‘œ์‹œ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ ์ฃผ์„์— ํŠน์ˆ˜ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ œ์–ด ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…์ŠคํŠธ์˜ ์ผ๋ถ€ ๋ถ€๋ถ„์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์ƒ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ œ์–ด ๋ฌธ์ž๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ํžˆ๋ธŒ๋ฆฌ์–ด ๋˜๋Š” ์•„๋ž์–ด๋กœ ๋œ ์ฝ”๋“œ ์ค„์„ ํŒŒ์ผ์— ์‚ฝ์ž…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€์ •๋œ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ๋ฐฉํ–ฅ์ด ๋‹ค๋ฅธ ์ค„์„ ํ•œ ์ค„์— ๊ฒฐํ•ฉํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ํ…์ŠคํŠธ ๊ตฌ์ ˆ์ด ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ธฐ์กด ์ผ๋ฐ˜ ํ…์ŠคํŠธ์™€ ๊ฒน์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์— ์•…์˜์ ์ธ ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ํ‘œ์‹œ๋œ ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž ๋‚ด๋ถ€์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ณผ ๋•Œ ์ด ๊ตฌ๋ฌธ์ด ํฌํ•จ๋œ ํ…์ŠคํŠธ๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•…์˜์ ์ธ ์‚ฝ์ž…์— ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ ๊ฒน์ณ์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋Š” ์˜๋ฏธ์ƒ์œผ๋กœ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์ง€๋งŒ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„๋˜๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ์œ ๋„ํ•˜๋Š” ํŠธ๋กœ์ด ๋ชฉ๋งˆ ์†Œ์Šค ๊ณต๊ฒฉ

์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ๋™์•ˆ ๊ฐœ๋ฐœ์ž๋Š” ๋ฌธ์ž์˜ ์‹œ๊ฐ์  ์ˆœ์„œ์— ์ง๋ฉดํ•˜๊ฒŒ ๋˜๋ฉฐ ์ตœ์‹  ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ, ์›น ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” IDE์—์„œ ์˜์‹ฌ์Šค๋Ÿฝ์ง€ ์•Š์€ ์ฃผ์„์„ ๋ณด๊ฒŒ ๋˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํ†ต์—ญ์‚ฌ๋Š” ๋ฌธ์ž์˜ ๋…ผ๋ฆฌ์  ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์˜ ์–‘๋ฐฉํ–ฅ ํ…์ŠคํŠธ์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์ง€ ์•Š๊ณ  ์•…์˜์ ์ธ ์‚ฝ์ž…์„ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ(VS Code, Emacs, Atom)์™€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(GitHub, Gitlab, BitBucket ๋ฐ ๋ชจ๋“  Atlassian ์ œํ’ˆ)์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ์œ ๋„ํ•˜๋Š” ํŠธ๋กœ์ด ๋ชฉ๋งˆ ์†Œ์Šค ๊ณต๊ฒฉ

์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•…์˜์ ์ธ ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆจ๊ฒจ์ง„ "๋ฐ˜ํ™˜" ํ‘œํ˜„์‹์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฏธ๋ฆฌ ๊ธฐ๋Šฅ์„ ์™„๋ฃŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ํšจํ•œ ๊ตฌ๋ฌธ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ํ‘œํ˜„์‹์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์ค‘์š”ํ•œ ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด). ๋ฌธ์ž์—ด ๊ฒ€์ฆ ์‹คํŒจ๋กœ ์ด์–ด์ง€๋Š” ๋‹ค๋ฅธ ๋ฌธ์ž์—ด ๊ฐ’ ํ• ๋‹น.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต๊ฒฉ์ž๋Š” ๋‹ค์Œ ์ค„์„ ํฌํ•จํ•˜๋Š” ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. if access_level != "user{U+202E} {U+2066}// Check if admin{U+2069} {U+2066}" {

์ด๋Š” ๋งˆ์น˜ access_level != โ€œuserโ€ { // ๊ด€๋ฆฌ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒ€ํ†  ์ธํ„ฐํŽ˜์ด์Šค์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋ชจ์–‘์€ ๋น„์Šทํ•˜์ง€๋งŒ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๊ณ  ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋ฌธ์ž์ธ ๋™ํ˜• ๋ฌธ์ž(์˜ˆ: ๋ฌธ์ž "ษ‘"๋Š” " a", "ษก" - "g", "ษฉ" - "l"). ์ผ๋ถ€ ์–ธ์–ด์—์„œ๋Š” ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜ ์ด๋ฆ„์— ์œ ์‚ฌํ•œ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋ฅผ ์˜ค๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋ถ„์„ ์—†์ด๋Š” ์ด ๋‘ ๊ธฐ๋Šฅ ์ค‘ ์–ด๋–ค ๊ธฐ๋Šฅ์ด ํŠน์ • ์œ„์น˜์—์„œ ํ˜ธ์ถœ๋˜๋Š”์ง€ ์ฆ‰์‹œ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ์œ ๋„ํ•˜๋Š” ํŠธ๋กœ์ด ๋ชฉ๋งˆ ์†Œ์Šค ๊ณต๊ฒฉ

๋ณด์•ˆ ์กฐ์น˜๋กœ์„œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋ฅผ ์ง€์›ํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ, ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐ ์–ด์…ˆ๋ธ”๋ฆฌ ๋„๊ตฌ๋Š” ์ฃผ์„, ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ๋˜๋Š” ์ถœ๋ ฅ ๋ฐฉํ–ฅ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์‹๋ณ„์ž(U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E ๋ฐ U+200F). ์ด๋Ÿฌํ•œ ๋ฌธ์ž๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์‚ฌ์–‘์—์„œ๋„ ๋ช…์‹œ์ ์œผ๋กœ ๊ธˆ์ง€๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ ๋ฐ ์ €์žฅ์†Œ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์กด์ค‘๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋ก 1: GCC, LLVM/Clang, Rust, Go, Python ๋ฐ binutils์— ๋Œ€ํ•œ ์ทจ์•ฝ์  ํŒจ์น˜๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GitHub, Bitbucket ๋ฐ Jira๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. GitLab์— ๋Œ€ํ•œ ์ˆ˜์ •์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋ ค๋ฉด grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]' /path/to/ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์›์ฒœ

๋ถ€๋ก 2: Plan 9 OS ๋ฐ Go ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์ธ Russ Cox๋Š” ์„ค๋ช…๋œ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•(Go, Rust, C++, Ruby)์— ๋Œ€ํ•ด ์ง€๋‚˜์นœ ๊ด€์‹ฌ์ด ์ง‘์ค‘๋˜๊ณ  ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์—ฌ์ง€์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋น„ํŒํ–ˆ์Šต๋‹ˆ๋‹ค. . Cox์— ๋”ฐ๋ฅด๋ฉด ์ด ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์™€ ์›น ์ธํ„ฐํŽ˜์ด์Šค์— ์ •๋ณด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ์ด๋Š” ๊ฒ€ํ†  ์ค‘์— ์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ์™€ ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ถ”์ธก์„ฑ ๊ณต๊ฒฉ์— ์ฃผ๋ชฉํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ฝ”๋“œ ๋ฐ ์ข…์†์„ฑ ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ์ ˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Ras Cox๋Š” ๋˜ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์ˆ˜์ค€์—์„œ ์œ„ํ—˜ํ•œ ๊ธฐํ˜ธ๋ฅผ ๊ธˆ์ง€ํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ๊ธฐํ˜ธ์˜ ์‚ฌ์šฉ์ด ํ—ˆ์šฉ๋˜๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ, ์–ด์…ˆ๋ธ”๋Ÿฌ, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋ฐ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ํŒŒ์„œ ๋ฐ ๋ฐ์ดํ„ฐ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ LTR/RTL ์ฝ”๋“œ ์ฒ˜๋ฆฌ๋ฅผ ๊ธˆ์ง€ํ–ˆ์ง€๋งŒ Cargo.toml ํŒŒ์ผ์„ ํ†ตํ•ด ์œ ์‚ฌํ•œ ๊ณต๊ฒฉ์„ ํ—ˆ์šฉํ•˜๋Š” Cargo ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ Rust ํ”„๋กœ์ ํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml ๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ.txt์™€ ๊ฐ™์€ ํŒŒ์ผ์€ ๊ณต๊ฒฉ ์†Œ์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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