QueryPie Community Edition is live ๐ŸŽ‰ Get it now for free Download today!

๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ
๋ฐฑ์„œ

SSH ํ”„๋ก์‹œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ Shell Native ๋ช…๋ น์–ด ์ œ์–ด

์ง„๋ณด๋œ SSH ํ”„๋ก์‹œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•œ ์ฟผ๋ฆฌํŒŒ์ด์˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋ช…๋ น ์ œ์–ด๋กœ ์‹œ์Šคํ…œ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜์„ธ์š”.

Ryan Chae

Ryan Chae

Software Engineer

๋ผ์ด์–ธ์€ ์•ˆ์ „ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ์— ํ’๋ถ€ํ•œ ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋กœ, QueryPie์—์„œ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ด์™”์Šต๋‹ˆ๋‹ค. ํŠนํžˆ SSH ํ”„๋ก์‹œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•œ ์‰˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋ช…๋ น์–ด ์ œ์–ด ์„ค๊ณ„์— ์ค‘์ถ”์ ์ธ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ๊นŠ์€ ์ „๋ฌธ์„ฑ๊ณผ ํ˜์‹ ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ๋ณต์žกํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ณ€ํ™”ํ•˜๋Š” ๊ธฐ์—… ๊ณ ๊ฐ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถ˜ ์†”๋ฃจ์…˜ ๊ฐœ๋ฐœ๊ณผ ์กฐ์ง์˜ ๊ธฐ์ˆ ์  ์„ฑ์žฅ์„ ์ด๋„๋Š”๋ฐ ํƒ์›”ํ•œ ๋Šฅ๋ ฅ์„ ๋ฐœํœ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Kevin So

Kevin So

Software Engineer

์ผ€๋นˆ์€ Windows, Android, Server ๋ฐ Web ํ™˜๊ฒฝ์„ ํฌํ•จํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ์˜ ์ œํ’ˆ ๊ฐœ๋ฐœ์— ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด์ž…๋‹ˆ๋‹ค. ์ผ€๋นˆ์€ ์ง๊ด€์ ์ด๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ ๋งค๋ ฅ์ ์ธ UI/UX ๋””์ž์ธ์„ ๊ตฌํ˜„ํ•ด๋‚ด๋Š” ๋ฐ์— ๊นŠ์€ ํ—Œ์‹ ์„ ์Ÿ์œผ๋ฉฐ, ๊ธฐ์ˆ ์  ์ „๋ฌธ์„ฑ๊ณผ ์„ธ์‹ฌํ•œ ๋””ํ…Œ์ผ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํƒ์›”ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

2024๋…„ 11์›” 22์ผ

SSH ํ”„๋ก์‹œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ Shell Native ๋ช…๋ น์–ด ์ œ์–ด

์„œ๋ฌธ

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

๋ฌธ์ œ

Issue to Solve

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

๋ชฉํ‘œ ์„ค์ •

๋ณด์•ˆ์„ฑ์„ ๋†’์ด๊ณ ์ž ๋ณดํ˜ธ ๋Œ€์ƒ์ธ ์„œ๋ฒ„์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ EDR๊ณผ์˜ ์˜์—ญ๊ณผ์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธํ•  ๋ฟ๋”๋Ÿฌ ์†๋„ ์ €ํ•˜ ๋ฐ ๋‹ค๋ฅธ ๋ถ€์ž‘์šฉ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์–ด SSH ์‚ฌ์šฉ์— ์žˆ์–ด์„œ ๋ถˆํŽธํ•จ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ QueryPie์—์„œ๋Š” ์„œ๋ฒ„์— ์—์ด์ „ํŠธ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๋ณด์•ˆ ์ธก๋ฉด์—์„œ๋Š” ์„œ๋ฒ„ ๋ ˆ๋ฒจ์˜ ์ˆ˜์ค€์œผ๋กœ ๋ช…๋ น์–ด ์ œ์–ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜ ๊ฐœ์š”

QueryPie์—์„œ๋Š” ์ •๊ตํ•œ ๋ช…๋ น์–ด ํƒ์ง€๋ฅผ ์œ„ํ•ด script injection์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•œ ๋ช…๋ น์–ด๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ๋กœ๊น… ๋ฐ ์ฐจ๋‹จ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ธฐ์ˆ ์„ ํ†ตํ•ด ๊ธฐ์กด ๋ฐฉ์‹์œผ๋กœ๋Š” ํŒŒ์•…ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์Šคํฌ๋ฆฝํŠธ ์•ˆ์— ํฌํ•จ๋œ ๊ธˆ์ง€๋ช…๋ น์–ด, alias๋œ ๋ช…๋ น์–ด, ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋œ ๋ช…๋ น์–ด ๋“ฑ์„ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๊ฒฐ๋ก 

๊ธฐ์กด์˜ ์„œ๋ฒ„ ์ ‘๊ทผ ์ œ์–ด ์†”๋ฃจ์…˜๋“ค์€ Proxy ์„œ๋ฒ„์—์„œ ์Šค๋‹ˆํ•‘ํ•œ SSH์˜ ๋ฐ์ดํ„ฐ ๋ฉ”์„ธ์ง€๋ฅผ ์žฌ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด๋ฅผ ์žฌ์กฐํ•ฉํ•˜๊ณ  ํ†ต์ œํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด, ์ด ์†”๋ฃจ์…˜์€ ๋ณดํ˜ธ ๋Œ€์ƒ์ด ๋˜๋Š” ์„œ๋ฒ„์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์บ์น˜ํ•˜๊ณ  ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ช…๋ น์–ด๊ฐ€ ์ž˜๋ชป ํŒŒ์‹ฑ๋  ๊ฐ€๋Šฅ์„ฑ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  SSH ์„ธ์…˜ ์ˆ˜๋ฆฝ์‹œ QueryPie Script๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๊ธฐ์ˆ ๊ณผ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ช…๋ น์–ด๊ฐ€ ์ฐจ๋‹จ๋œ ์‚ฌ์‹ค์„ QueryPie Proxy ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์„ ํ†ตํ•ด์„œ ์—์ด์ „ํŠธ ์—†์ด ์„œ๋ฒ„์— ํ”„๋กœ์„ธ์Šค ๊ฐ์‹œ์šฉ ๋ฐ๋ชฌ์„ ์„ค์น˜ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๋ช…๋ น์–ด ๊ฐ์‹œ์šฉ ๋ฐ๋ชฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ๋“ค๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • LD_PRELOAD
  • ptrace
  • ebpf

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

SSH ํ”„๋ก์‹œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ Shell Native ๋ช…๋ น์–ด ์ œ์–ด | QueryPie