OWASP (The Open Web Application Security Project)
์ ์ธ๊ณ์ ๋ณด์ ์ ๋ฌธ๊ฐ๋ค์ด ์น์ ๋ณด์์ ๋ํ ํ์ค์ ์ ์ํ๊ณ ์ด์ ๋ํด ๊ธฐ์ ๊ณผ ๊ฐ๋ฐ์๋ค์๊ฒ ํจ์จ์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์คํ์์ค ์ปค๋ฎค๋ํฐ
OWASP TOP 10 : 3๋ ์ ๋์ ์ฃผ๊ธฐ๋ก ๋ฐํํ๋ ์น 10๋ ์ทจ์ฝ์
1. SQL injection ๊ณต๊ฒฉ : ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์์์ SQL๋ฌธ์ ์คํํ ์ ์๋๋ก ๋ช ๋ น์ด๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ ์ ํ
๐ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ณด์์์ ํ์ ์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋น์ ์์ ์ผ๋ก ์กฐ์ํ์ฌ, ๊ธฐ๋ก์ด ์ญ์ ๋๊ฑฐ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ถ๋ ์ ์๋ค.
๊ณต๊ฒฉ ์๋๋ฆฌ์ค
1. ๊ณต๊ฒฉ์๊ฐ ์ ์์ ์ธ SQL๋ฌธ์ ๋ฃ์ด ์๋ฒ์ ์ ์กํ๋ค.
2. ์๋ฒ๊ฐ ํด๋น SQL๋ฌธ์ ๊ธฐ์กด SQL์ ์ฝ์ ํด์ ๋ฐ์ดํฐ๋ฒ ์ดํฐ์ค ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋
๐ ์ ์
SELECT *
FROM users
WHERE auth='admin'
AND id='happyhailie';
๐ ๋น์ ์
SELECT *
FROM users
WHERE auth='admin'
AND id='' OR '1'='1';
3. id ๊ฒ์ฆ ์ฌ๋ถ์ ์๊ด์์ด '1' = '1'์ ์ฐธ์ด๋ฏ๋ก ๋ชจ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ฐํํจ
4. ๋ชจ๋ ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ๊ณต๊ฒฉ์์๊ฒ ์ ์ก๋จ.
SQL injection ๊ณต๊ฒฉ์ ๋ํ ๋์ ๋ฐฉ์
1. ์ ๋ ฅ(์์ฒญ) ๊ฐ ๊ฒ์ฆ
ํ์ดํธ๋ฆฌ์คํธ* ๋ฐฉ์์ผ๋ก ํค์๋๊ฐ ๋ค์ด์ค๋ฉด ๋ค๋ฅธ ๊ฐ์ผ๋ก ์นํํ๋ ๋ฐฉ๋ฒ
* ํ์ดํธ ๋ฆฌ์คํธ = ๊ธฐ๋ณธ ์ ์ฑ ์ด ๋ชจ๋ ์ฐจ๋จ์ธ ์ํฉ์์ ์์ธ์ ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋์์ ์ง์ ํ๋ ๋ฐฉ์ ๋๋ ๊ทธ ์ง์ ๋ ๋์๋ค
2. Prepared Statement ๊ตฌ๋ฌธ ์ฌ์ฉ
์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ด ์ ๋ฌ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฏธ๋ฆฌ ์ปดํ์ผํ์ฌ SQL์ ๋ฐ๋ก ์คํํ์ง ์๊ณ ๋๊ธฐํ๊ณ , ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ๋จ์ ํ ์คํธ๋ก ์ธ์ํ๋ ๋ฐฉ๋ฒ. (์ฌ์ฉ์์ ์ ๋ ฅ์ SQL๋ฌธ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ ์ํจ๋ค. )
3. Error Message ๋ ธ์ถ ๊ธ์ง
๊ณต๊ฒฉ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ํตํด ํ ์ด๋ธ์ด๋ ์ปฌ๋ผ ๋ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ณด๋ฅผ ์ป์ ์ ์๋๋ฐ, ์๋ฌ๊ฐ ๋ฐ์ํ SQL ๋ฌธ๊ณผ ์๋ฌ ๋ด์ฉ์ด ํด๋ผ์ด์ธํธ์ ๋ ธ์ถ๋์ง ์๋๋ก ๋ณ๋์ ์๋ฌํธ๋ค๋ง์ด ํ์ํ๋ค.
2. XSS ๊ณต๊ฒฉ (Cross-Site Scripting, ์ฌ์ดํธ ๊ฐ ์คํฌ๋ฆฝํ ) = ๊ณต๊ฒฉ์๊ฐ ์น ์ฌ์ดํธ์ ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ด๋๋ ํ์
์ฃผ๋ก ํด๋ฆญ์ ์ ๋ํ๋ ๊ธ์ ์์ฑํ๊ณ , ํด๋น ๊ธ์ ํด๋ฆญํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ฌ์ด๋์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ์น ์ฌ์ดํธ ์ด์ฉ์์๊ฒ ํผํด๋ฅผ ์ค๋ค.
์ฌ์ฉ์์ ์ฟ ํค ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํ์ทจํด์ CSRF ๋ฑ ๋ค์ํ ๊ณต๊ฒฉ์ ํ์ฉํ๊ธฐ๋ ํจ. (๊ณต๊ฒฉ ๋์ ํด๋ผ์ด์ธํธ)
XSS ๊ณต๊ฒฉ ์ ํ
1. Stored XSS = ์คํฌ๋ฆฝํธ๊ฐ ์๋ฒ์ ์ ์ฅ๋์ด ์ฌ๋ฌ ์ฌ์ฉ์์๊ฒ ํผํด๋ฅผ ์ค ์ ์๋ ์ ํ (์ง์์ ๊ธฐ๋ฒ)
- ๊ณต๊ฒฉ์๊ฐ ๊ฒ์ํ์ ํ ์คํธ๊ฐ ์๋ ์คํฌ๋ฆฝํธ๊ฐ ๋ด๊ธด ๊ธ์ ์์ฑํ๊ณ , ์์ฑ๋ ๊ธ์ด ์๋ฒ์ ์ ์ฅ๋๋ค.
- ์ผ๋ฐ ์ฌ์ฉ์(ํผํด์)๊ฐ ํด๋น ๊ธ์ ์กฐํํ ๋๋ง๋ค HTML๋ก ๊ธ์ ๋ด์ฉ์ด ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ๊ณผ์ ์์ ํด๋น ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ๋จ์ํ ์ด๋ค ์คํ์ ํ๋๋ก ํ ์๋ ์์ง๋ง ์คํฌ๋ฆฝํธ ๋ด๋ถ์์ ์ฟ ํค ๋ฑ ๋ฏผ๊ฐํ ๊ฐ์ธ ์ ๋ณด๋ฅผ ํ์ทจํ ์๋ ์๋ค.
- ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์์ฑ๋ ๊ธ์ ์๋ฒ์ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ธ์ ์กฐํํ ๋๋ง๋ค ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ๋ถํน์ ๋ค์๋ฅผ ๋์์ผ๋ก ๊ณต๊ฒฉํ๋ค.
2. Reflected XSS = URL ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ์ ํ (๋น ์ง์์ ๊ธฐ๋ฒ)
์ด ์คํฌ๋ฆฝํธ๋ ์๋ฒ์ ์ ์ฅ๋์ง ์์ผ๋ฉฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ง์ ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ ๋ ๋ํ๋๋ ์ทจ์ฝ์ ์ ์ด์ฉํ๋ค.
- ๊ณต๊ฒฉ์๋ URL ํ๋ผ๋ฏธํฐ์ ์คํฌ๋ฆฝํธ๊ฐ ์์ฑ๋ ๋งํฌ๋ก ์ฌ์ฉ์์ ํด๋ฆญ์ ์ ๋ํ๋ค. ์ฃผ๋ก ํผ์ฑ(e.g. ๋ฐฐ์กํํฉ ํ์ธ ๋ฌธ์)์ ์ฌ์ฉ๋จ.
- ํผํด์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ด๋ฆฌ๊ธธ ์์ํ๋ ์น ์ฌ์ดํธ๊ฐ ์๋ ๋ค๋ฅธ ์น ์ฌ์ดํธ(e.g. ์ทจ์ฝ์ ์ด ์๋ ๊ฒ์์์ง)์ ๋งํฌ๋ก ์ฐ๊ฒฐ๋๋ค. ์ฆ, ์์ฒญ์ด ๋ณด๋ด์ง๋ค.
- ํด๋น ์น ์๋ฒ๋ URL์ ๋ด๊ธด ์คํฌ๋ฆฝํธ๋ฅผ ๊ทธ๋๋ก ๋ฐ์ฌ(reflect)ํ์ฌ ํด๋ผ์ด์ธํธ(ํผํด์)์ ์๋ต์ ์ ์กํ๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ๊ทธ๋๋ก ์คํํ๋ค. alert(”Warning!”)๊ณผ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ๊ฐ ๋จ์ํ ์ด๋ค ์คํ์ ํ๋๋ก ํ ์๋ ์์ง๋ง, ๋ณดํต์ ์ฟ ํค ๋ฑ ๋ฏผ๊ฐํ ๊ฐ์ธ ์ ๋ณด๋ฅผ ํ์ทจํ๋ ์ฝ๋๋ฅผ ์ฌ์ด ๋๋๋ค.
XSS ๊ณต๊ฒฉ ์ ๋ํ ๋์ ๋ฐฉ์
1. ์คํฌ๋ฆฝํธ ํ๊ทธ์ ์ ๋ ฅ์ ๋ง๊ธฐ
- ์ ๋ ฅ๋ ๊ฐ์ ํ๊ทธ(<>)์ ๊ฐ์ ํน์๋ฌธ์๊ฐ ์ ๋ ฅ๋์ง ์๊ฒ ํ๊ฑฐ๋, ์ ์ฅ ์์ฒญ์ด ์จ ๊ธ์ ํ๊ทธ(<>)์ ๊ฐ์ ํน์๋ฌธ์๊ฐ ์๋์ง ๊ฒ์ฆํ๋ค. ํด๋ผ์ด์ธํธ ์ธก์์ ์ ์ ๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ๋ ๊ณณ์ innerHTML ๋์ textContent ์์ฑ์ ์ฌ์ฉํ์ฌ ํํฐ๋งํ ์ ์๋ค.
- <๋ < ๋ก ์นํํ๊ณ , >๋ >๋ก ์นํํ๊ณ ์ ์ฅํ์ฌ HTML์ ํ๊ทธ๋ก ์ธ์๋์ง ์์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ง ์๊ฒ ํ๊ธฐ.
2. ์ฟ ํค ์ค์ ํ์ธํ๊ธฐ (httpOnly)
์ฌ์ดํธ์ ์คํฌ๋ฆฝํธ๊ฐ ์ ์ฅ ํน์ ์คํ๋๋ ์ผ ์์ฒด๋ฅผ ๋ฐฉ์งํ์ง ์์ง๋ง, ์คํฌ๋ฆฝํธ๊ฐ ์ฟ ํค๋ฅผ ํ์ทจํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํด ์ฟ ํค์ ์ ์ฅ๋ ๋ฏผ๊ฐํ ๊ฐ์ธ ์ ๋ณด์ ์ ์ถ์ ๋ง์ ์ ์๋ค. document.cookie๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ฟ ํค์ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋๋ค.
3. ์ฟ ํค์ ๋ฏผ๊ฐํ ์ ๋ณด ๋ด์ง ์๊ธฐ
- ๋ฏผ๊ฐํ ์ ๋ณด๋ ์๋ฒ์์ ๊ด๋ฆฌํ๊ธฐ
- ์ํธํํด์ ์ฌ์ฉํ๊ธฐ
3. CSRF ๊ณต๊ฒฉ (cross site request forgery)
๋ค๋ฅธ ์ค๋ฆฌ์ง์ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ๊ถํ์ ํ์ทจํ์ฌ ์๋ฒ์ ๊ฐ์ง ์์ฒญ์ ๋ณด๋ธ๋ค. (๊ณต๊ฒฉ ๋์ ์๋ฒ)
(๊ณต๊ฒฉ์๋ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋ค. )
์ฅ์ ํดํน ์ฌ๊ฑด
<img src="http://auction.com/changeUserAcoount?id=admin&password=admin" width="0" height="0">
- ์ฅ์ ๊ด๋ฆฌ์๊ฐ ๊ด๋ฆฌ ๊ถํ์ ๊ฐ์ง๊ณ (์ด๋ฏธ ์ ํจํ ์ฟ ํค ๋ฐ๊ธ๋ ์ํ๋ก) ๋ฉ์ผ์ ์กฐํํ๋ค.
- ํด์ปค๋ ์์ ๊ฐ์ด ํ๊ทธ๊ฐ ๋ค์ด๊ฐ ์ฝ๋๊ฐ ๋ด๊ธด ์ด๋ฉ์ผ์ ๋ณด๋ธ๋ค. ๋จ, ๊ด๋ฆฌ์๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ 0์ด๋ฏ๋ก ์ด๋ฏธ์ง๊ฐ ์๋์ง ๋์น๋ฅผ ์ฑ์ง ๋ชปํ๋ค.
- ๊ด๋ฆฌ์๊ฐ ๋ฉ์ผ์ ์ด๋ฉด ์ด๋ฏธ์ง ํ์ผ์ ๋ฐ์์ค๊ธฐ ์ํด URL์ด ์ด๋ฆฐ๋ค.
- ๊ทธ๋ ๊ฒ ๋๋ฉด ํด์ปค๊ฐ ์ํ๋ ๋๋ก ๊ด๋ฆฌ์์ ๊ณ์ ์ด id์ pw ๋ชจ๋ admin์ธ ๊ณ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
CSRF ๊ณต๊ฒฉ ๋์ ๋ฐฉ์
- CSRF ํ ํฐ ์ฌ์ฉํ๊ธฐ
์๋ฒ ์ธก์์ CSRF ๊ณต๊ฒฉ์ ๋ณดํธํ๊ธฐ ์ํ ๋ฌธ์์ด์ ์ ์ ์ ๋ธ๋ผ์ฐ์ ์ ์น ์ฑ์๋ง ์ ๊ณตํ๋ค.
- Same-site cookie ์ฌ์ฉํ๊ธฐ
๊ฐ์ ๋๋ฉ์ธ์์๋ง ์ธ์ /์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค.
4. Clickjacking ๊ณต๊ฒฉ = ์ฌ์ฉ์๊ฐ ์๋ํ ํด๋ฆญ ๋์์ด ์๋ ๋ค๋ฅธ ๋์์ ํด๋ฆญํ๋๋ก ์์ด๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ
- ์ด๋ฉ์ผ ํน์ ๊ด๊ณ ๋ฌธ๊ตฌ ๋ฑ ์ฌ์ฉ์์ ํด๋ฆญ์ ์ ๋ํ์ฌ ๋ณธ๋ ์น ํ์ด์ง์ ๋์ผํ ํผ์ฑ ์ฌ์ดํธ๋ก ์ ๊ทผํ๋๋ก ํ๋ค.
- ์ ์์ ์ธ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์น ์ฌ์ดํธ์ ๋์ผํ๊ฒ ์๊ฒผ์ง๋ง, iframe ํ๊ทธ๋ฅผ ์ด์ฉํด ๋ณด์ด์ง ์๋ ๋ฒํผ์ ๋ฐฐ์นํ๋ค. iframe ํ๊ทธ๋ฅผ ์ด์ฉํ๋ฉด ์ผ๋ฐ HTML ํ๋ฉด๋ณด๋ค ๋ ๋์ ๋ ์ด์ด์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ํด๋ฆญํ๋ค๊ณ ์ธ์งํ๋ ๋ฒํผ๊ณผ๋ ๋ค๋ฅธ ๋ฒํผ์ด ๋๋ฆฌ๊ฒ ๋๋ค.
- ํด๋น ํด๋ฆญ์ผ๋ก ์ธํด ๊ณต๊ฒฉ์๋ ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด๊ฐ ํ์ทจํ๊ฑฐ๋ ์ฌ์ฉ์์ ์ปดํจํฐ ์ ์ด๊ถ์ ํ๋ํ๋ค.
Clickjacking ๋์ ๋ฐฉ์
1. X-Frame-Options
X-Frame-Options ํค๋์ ์ค์ ํ ์ต์ ์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ์น ํ์ด์ง ํ๋ฉด์ <iframe> ์ ๋ ๋๋ง ์ฌ๋ถ๋ฅผ ์ ํํ๋ค.
2. ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (Content Security Policy, CSP)
์น ์ฌ์ดํธ ์์ ์๋ค์ด ์ฝํ ์ธ ์ ์ถ์ฒ(์ค๋ฆฌ์ง)๋ฅผ ์ ๋ขฐํ ์ ์๋๋ก ํ์ค ๋ฐฉ์์ ์ ๊ณตํ์ฌ ์ธ๋ถ์ ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๋ ๋ฐ์ดํฐ ์ฝ์ ๊ณต๊ฒฉ์ ๋ง์ ์ ์๋ค.
'๐ฌComputer Science > ๋คํธ์ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๋ ๋๋, ์ค๋ ๋ ํน์ง, ์ฑ๊ธ ์ค๋ ๋, ๋ฉํฐ ์ค๋ ๋ (0) | 2022.08.01 |
---|---|
TIL) ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์ ์ฐจ, OAUTH 2.0 ์ด๋, JWT (0) | 2022.07.15 |
TIL) Cookie ์ ์, Session ์ ์, ์ฟ ํค์ ์ธ์ ์ ์ฐจ์ด (0) | 2022.07.14 |
TIL) ์ํธํ, hashing์ด๋, ํด์ฑ์ด๋, salt ๋? (0) | 2022.07.14 |
TIL) HTTPS ์ด๋? HTTPS ํน์ง, HTTPS ๋ชฉ์ (0) | 2022.07.14 |