๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/DevOps

AWS ๋ณด์•ˆ

by ํฌ์ŠคํŠธ์‰์ดํฌ 2023. 3. 9.

์ •๋ณด ๋ณดํ˜ธ ๋ณด์•ˆ

์ •๋ณด ๋ณดํ˜ธ ๋ณด์•ˆ์˜ ๊ฐœ๋…

์ •๋ณด์˜ ์ˆ˜์ง‘, ๊ฐ€๊ณต, ์ €์žฅ, ๊ฒ€์ƒ‰, ์†ก์‹  ์ค‘์— ์ •๋ณด์˜ ํ›ผ์†, ๋ณ€์กฐ, ์œ ์ถœ ๋“ฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ์ , ๊ธฐ์ˆ ์  ์ˆ˜๋‹จ ๋˜๋Š” ๊ทธ๋Ÿฌํ•œ ์ˆ˜๋‹จ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ํ–‰์œ„

๊ธฐ์—…์—์„œ ์ •๋ณด ๋ณดํ˜ธ์˜ ๋Œ€์ƒ

โœ” ์ถœ์ž…ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ + ์œ ๋ฌดํ˜•์˜ ์ •๋ณด ์ž์‚ฐ

์ •๋ณด ๋ณดํ˜ธ ๋Œ€์ฑ…

  1. ๊ด€๋ฆฌ์  ๋ณดํ˜ธ ๋Œ€์ฑ…: ์ œ๋„, ๋ณด์•ˆ ๊ต์œก, ํ›ˆ๋ จ, ๋ณด์•ˆ ์ง๋ฌด
  2. ๋ฌผ๋ฆฌ์  ๋ณดํ˜ธ ๋Œ€์ฑ…: ์ถœ์ž…ํ†ต์ œ, ์žฌ๋‚œ ๋ฐฉ์ง€
  3. ๊ธฐ์ˆ ์  ๋ณดํ˜ธ ๋Œ€์ฑ…: ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ ํ†ต์ œ, ๋ณด์•ˆ ์†Œํ”„ํŠธ์›จ์–ด, ๋ฐฉํ™”๋ฒฝ

์‚ฌ์ดํŠธ ๋ณด์•ˆ

โœ” ํŒŒ์ผ ์—…๋กœ๋“œ ์ทจ์•ฝ์ 

โœ” XSS (Cross Site Scripting)

โœ” SQL Injection

ํŒŒ์ผ ์—…๋กœ๋“œ ์ทจ์•ฝ์ 

โœ” ๊ฒŒ์‹œํŒ ๋“ฑ์˜ ์ฒจ๋ถ€ ํŒŒ์ผ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ํ—ˆ๊ฐ€ ๋˜์ง€ ์•Š์€ ํŒŒ์ผ๋“ค์„ ์›น์„œ๋ฒ„๋กœ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์  (php, jsp, asp, cji, ji, py ๋“ฑ)

httpd.conf
<Directory "/usr/local/apache">
AllowOverride FileInfo
</Directory>
.htaccess
<FilesMatch "\.(ph|inc|lib)">
 Order allow, deny
  Deny from all
</FilesMatch>

AddType text/html html.htm.php .php3 -php4.phtml.phps in .c gใ…‘ -pl .shtml-jsp

์˜ˆ๋ฐฉ

โœ” ํŒŒ์ผ ์—…๋กœ๋“œ ๋””๋ ‰ํ† ๋ฆฌ "์‹คํ–‰"๊ถŒํ•œ ์ œ๊ฑฐ

โœ” ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ํ™•์žฅ์ž ์—…๋กœ๋“œ ์ œํ•œ

XSS

โœ” ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ ์‚ฝ์ž…

โœ” ํ™ˆํŽ˜์ด์ง€ ์ ‘์†์ž์˜ ๊ถŒํ•œ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•˜๊ฑฐ๋‚˜ ์•…์„ฑ์ฝ”๋“œ ๊ฐ์—ผ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ 

์˜ˆ๋ฐฉ

โœ” XSS ํ•„ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ESAPI
  • Lucyxss filter

โœ” X-XSS-Protection ์‘๋‹ต ํ—ค๋” ์‚ฌ์šฉ

โœ” ๋ฌธ์ž์—ด ์น˜ํ™˜ (<>&" ๋“ฑ์„ < > & " ๋กœ ์น˜ํ™˜)

  • ๋ณด์กฐ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ (๊ณต๊ฒฉ์ž๊ฐ€ ํ•ด์ œ ๊ฐ€๋Šฅ)

SQL Injection

โœ” ๊ฒŒ์‹œํŒ, ํšŒ์›๊ฐ€์ž… ์ฐฝ, URL ๋“ฑ์„ ํ†ตํ•ด ๋ถ€์ ์ ˆํ•œ ๊ฐ’์„ ์‚ฝ์ž…ํ•˜์—ฌ DB๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋‚ด๊ฑฐ๋‚˜ ๋กœ๊ทธ์ธ ์ ˆ์ฐจ ์šฐํšŒ ๋“ฑ ๋น„์ •์ƒ ๋™์ž‘์„ ์œ ๋ฐœ

โœ” ๊ต‰์žฅํžˆ ์œ„ํ—˜ํ•˜๋‹ค

์˜ˆ๋ฐฉ

โœ” ์‹œํ์–ด ์ฝ”๋”ฉ(' ; -- # /* */ ๋“ฑ ์ž…๋ ฅ๋‚ด์šฉ ํ•„ํ„ฐ๋ง)

  • PreparedStatement: ๊ฐ’์„ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์‹œ์ ์—์„œ ์ „๋‹ฌ๋œ ํŠน์ˆ˜๋ฌธ์ž ์ฟผ๋ฆฌ ๋“ฑ์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ sql injection ์˜ˆ๋ฐฉ
1 preparedStatement = "SELECT * FROM users WHERE name = ?";
2 preparedStatement.setString(1, userName);
3
4 # If someone puts
5' or '1'='1
6
7 # Result
8 SQL FIND name : ' or '1'='1

โœ” ์›น ๋ฐฉํ™”๋ฒฝ ๊ตฌ์ถ•

์›น ์„œ๋ฒ„ ๋ณด์•ˆ

โœ” ๊ณ„์ •๊ด€๋ฆฌ

โœ” root ๊ณ„์ •์˜ PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

โœ” ์„œ๋น„์Šค ๊ด€๋ฆฌ

๊ณ„์ • ๊ด€๋ฆฌ

โœ” root ๊ณ„์ • ์›๊ฒฉ ์ ‘์† ์ œํ•œ

  • root ๊ณ„์ • ๋ณด์•ˆ์ด ํŠนํžˆ ์ค‘์š”ํ•˜๋‹ค!
  • Telnet ์›๊ฒฉ ์ ‘์† ์ฐจ๋‹จ
  • SSH ์›๊ฒฉ ์ ‘์† ์ฐจ๋‹จ
Telnet ์›๊ฒฉ์ ‘์† ์ฐจ๋‹จ
1 vi /etc/securetty
2 pts/0~ pts/x ์„ค์ • ์ œ๊ฑฐ
3
4 vi /etc/pam.d/login
5 # auth required /lib/security/pam_securetty.so #์ œ๊ฑฐ(์ฃผ์„์ œ๊ฑฐ)
6 auth required/lib/security/pam_securetty.so
SSH ์›๊ฒฉ์ ‘์† ์ฐจ๋‹จ
1 vi /etc/ssh/sshd_config
2 "PermitRootLogin no" ์„ค์ •

โœ” ๋กœ๊ทธ์ธ ์‹คํŒจ ์ž„๊ณ„๊ฐ’ ์„ค์ •

โœ” ํŒจ์Šค์›Œ๋“œ ๋ณต์žก๋„ ์„ค์ •

  • public key
  • two factor ๋กœ๊ทธ์ธ ์„ค์ •

root ๊ณ„์ •์˜ PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

โœ” PATH์— ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ณด๋‹ค "."(ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)๊ฐ€ ๋จผ์ € ์˜ค๋ฉด, ๋ณ€์กฐ๋œ ๋ช…๋ น์–ด ์‚ฝ์ž…์œผ๋กœ ์•…์˜์  ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ

์„œ๋น„์Šค ๊ด€๋ฆฌ

โœ” Apache, Nginx ๋“ฑ ์ž˜๋ชป๋œ ๋ณด์•ˆ ์„ค์ •์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋น„์ธ๊ฐ€์ž์˜ ์›๊ฒฉ ์ ‘์†, ์ •๋ณด ๋…ธ์ถœ ๋“ฑ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค

โœ” Directory Listing: ์„ค์ •๋œ ๋ชจ๋“  Directory ์˜ต์…˜ ์ง€์‹œ์ž์—์„œ indexes ์ œ๊ฑฐ

#Directory Listing
Index of /
Name Last modified Size Description
secret/ 2017-01-27 15:40
priv/ 2017-01-27 15:41
edit/ 2017-01-27 15:40
dirl/ 2017-01-27 15:40
config.php 2017-01-27 15:40 11K
Apache/2.4.23 (Wm64) PHP/5.6.25 Server at localhost Port 80
#httpd.conf
1 <Directory />
2 #Options Indexes
3 AllowOverride None
4 Order allow, deny
5 Allow from all
6</Directory>
7

์›น ๋ฐฉํ™”๋ฒฝ(WAF)

โœ” L7(OSI 7 Layers)์—์„œ ๋ณด์•ˆ ์œ ์ง€

โœ” SQL injection, XSS ๋“ฑ ์›น ๊ณต๊ฒฉ ํƒ์ง€, ์ฐจ๋‹จ

โœ” DDOS, IP์ฐจ๋‹จ, Rate limit ๋“ฑ ๊ทœ์น™ ์ƒ์„ฑ

โœ” modsecurity

AWS ๋ณด์•ˆ ๊ฐ€์ด๋“œ

ํด๋ผ์šฐ๋“œ์˜ ์žฅ์ ๊ณผ ๋ณด์•ˆ

ํด๋ผ์šฐ๋“œ์˜ ์žฅ์ 

โœ” ์ดˆ๊ธฐ ์„ ํˆฌ์ž ๋น„์šฉ x

โœ” ์šด์˜ ๋น„์šฉ ์ ˆ๊ฐ

  • ์‚ฌ์šฉํ•œ ๋งŒํผ๋งŒ ๋น„์šฉ๋งŒ ๋‚ธ๋‹ค
  • ๊ทธ๋Ÿฌ๋‚˜ ํ•ดํ‚น ๋ฐœ์ƒ ์‹œ? -> ์–ด๋งˆ์–ด๋งˆํ•œ ๋น„์šฉ ๋ถ€๊ณผ

โœ” ํƒ„๋ ฅ์ ์ธ ์šด์˜ ๋ฐ ํ™•์žฅ

โœ” ์†๋„ ๋ฐ ๋ฏผ์ฒฉ์„ฑ

  • ์ˆ˜ ๋ถ„๋งŒ์— ์ธํ”„๋ผ ๊ตฌ์ถ• ๊ฐ€๋Šฅ
  • ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”์— ๋Œ€์‘

โœ” ๋น„์ฆˆ๋‹ˆ์Šค์—๋งŒ ์ง‘์ค‘ ๊ฐ€๋Šฅ

โœ” ๊ธ€๋กœ๋ฒŒ ํ™•์žฅ

โœ” ์ ‘๊ทผ์„ฑ

์‚ฌ๊ณ  ์‚ฌ๋ก€

โœ” ๊ณ„์ •ํ•ดํ‚น

โœ” ๋ฐ์ดํ„ฐ ์œ ์ถœ

โœ” ๋ณต๊ตฌ ์‹คํŒจ(๋žœ์„ฌ์›จ์–ด)

์‹œ์‚ฌ์ 

โœ” ๊ณ„์ • ๋ณด์•ˆ์— ๋Œ€ํ•œ ์ฑ…์ž„์€ ์‚ฌ์šฉ์ž ๋ณธ์ธ์—๊ฒŒ ์žˆ๋‹ค

โœ” ์˜ˆ๋ฐฉ

  • MFA ํ™œ์„ฑํ™”
  • AWS access key ๋ณดํ˜ธ

โœ” ๋ฆฌ์Šคํฌ ๊ด€๋ฆฌ

  • ROOT ์‚ฌ์šฉ์ž ๋ณด์•ˆ ๊ฐ•ํ™”
  • IAM ์‚ฌ์šฉ์ž๋ฅผ ํ†ตํ•œ ๊ด€๋ฆฌ

โœ” ๊ฐ์ง€

  • ๋น„์šฉ ๊ด€๋ จ ์•Œ๋ฆผ ์„ค์ •

๋ชจ๋ฒ” ์‚ฌ๋ก€

MFA ํ™œ์„ฑํ™”

โœ” Multi Factor Authentication

โœ” ์ผ๋ฐ˜์ ์œผ๋กœ Authentication App ์‚ฌ์šฉ

  • google OTP, Twilio Authy, Microsoft Authenticator

aws ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” MFA์˜ ๋ชจ๋“  ๊ฒƒ

aws์—์„œ MFA ์‚ฌ์šฉ

AWS Access Key ๋ณดํ˜ธ

โœ” AWS CLI๋‚˜ API ์‚ฌ์šฉ์‹œ, ์ธ์ฆ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ž๊ฒฉ ์ฆ๋ช…

โœ” access key id์™€ security access key๋กœ ๊ตฌ์„ฑ

โœ” ๊ฐ€์ด๋“œ

  • ์ฃผ๊ธฐ์ ์ธ access key ๊ต์ฒด ๋ฐ ๋ฏธ์‚ฌ์šฉ key ์ œ๊ฑฐ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณ„ ์ตœ์†Œ ๊ถŒํ•œ ์ ์šฉ
  • github๋“ฑ commit ์‹œ ์ฃผ์˜
  • git-secrets๋“ฑ์„ ํ™œ์šฉํ•œ access key ์•”ํ˜ธํ™” ๋ฐ ๋ณดํ˜ธ

AWS ์•ก์„ธ์Šค ํ‚ค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

ROOT ์‚ฌ์šฉ์ž ๋ณด์•ˆ ๊ฐ•ํ™”

โœ” ROOT ์‚ฌ์šฉ์ž

  • AWS ๊ณ„์ • ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉํ•œ ์ด๋ฉ”์ผ ์ฃผ์†Œ์™€ ํŒจ์Šค์›Œ๋“œ๋กœ ์ธ์ฆํ•˜๋Š” ๊ณ„์ •
  • ๋ชจ๋“  ๊ถŒํ•œ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ถŒํ•œ ์ œ์•ฝ ์„ค์ •์ด ๋ถˆ๊ฐ€๋Šฅ
  • ํ•ดํ‚น ์‹œ ํ”ผํ•ด๊ฐ€ ๋ง‰์‹ฌํ•˜๋‹ค!

โœ” ๊ฐ€์ด๋“œ

  • ํ‰์ƒ์‹œ์—๋Š” ๋ฏธ์‚ฌ์šฉ
  • Access Key ์ƒ์„ฑ ๊ธˆ์ง€
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ… ๊ฐ•ํ™”
  • MFA ํ™œ์„ฑํ™”

IAM ์‚ฌ์šฉ์ž๋ฅผ ํ†ตํ•œ ๊ดธ๋ฆฌ

โœ” AWS identity and Access Management

  • aws ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์—‘์„ธ์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค
  • ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน๋ณ„ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ํ†ตํ•˜์—ฌ, AWS ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์—‘์„ธ์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ œ์–ด

โœ” ๊ฐ€์ด๋“œ

  • ๊ฐœ๋ณ„/์šฉ๋„๋ณ„ ์‚ฌ์šฉ์ž ์ƒ์„ฑ
  • ๊ทธ๋ฃน์„ ํ†ตํ•œ ๊ถŒ๋ž€ ๊ด€๋ฆฌ
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ… ๊ฐ•ํ™”

๋น„์šฉ ๊ด€๋ จ ์•Œ๋ฆผ ์„ค์ •

โœ” ์ด๋ฉ”์ผ ์ •๋ณด ์—…๋ฐ์ดํŠธ

  • ์ž์ฃผ ์“ฐ๋Š” ์ด๋ฉ”์ผ๋กœ ์„ค์ • ๋ฐ ํ™•์ธ

โœ” Free Tier ํ•œ๋„ ์ดˆ๊ณผ ๊ฒฝ๋ณด ์ƒ์„ฑ

  • ํ•œ๋„ ์ดˆ๊ณผ ์‹œ ๋ฉ”์ผ์ด๋‚˜ SMS ์„ค์ •

โœ” ์›”๋ณ„/์‹ค์‹œ๊ฐ„ ์˜ˆ์ƒ ์š”๊ธˆ ๊ฒฝ๊ณ  ์„ค์ •

  • Amazon CloudWatch๋ฅผ ์ด์šฉํ•œ ์›”๊ฐ„ ์˜ˆ์ƒ AWS์š”๊ธˆ ์•Œ๋ฆผ ์„ค์ •
  • AWS chatbot์„ ์‚ฌ์šฉํ•œ slack์—์„œ ์˜ˆ์‚ฐ ์•Œ๋ฆผ ์ˆ˜์‹ 

์˜ˆ์ƒ AWS์š”๊ธˆ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฐ์ œ ๊ฒ…๋ณด ์ƒ์„ฑ

AWS ํ”„๋ฆฌํ‹ฐ์–ด ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์ 

๊ณ„์ • ์นจํ•ด ์‹œ ํ›„์† ์กฐ์น˜

โœ” AWS support ์„ผํ„ฐ์— case ๋“ฑ๋ก (์ตœ์šฐ์„ !)

โœ” AWS ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ํ›„์† ์กฐ์น˜

  • ๋ฌด๋‹จ์œผ๋กœ ์ƒ์„ฑ๋œ ๋น„์ •์ƒ ๋ฆฌ์†Œ์Šค ์‚ญ์ œ
  • ์ „์ฒด ์‚ฌ์šฉ์ž (Root ๋ฐ IAM ์‚ฌ์šฉ์ž) ์•”ํ˜ธ ๋ณ€๊ฒฝ
  • ๋ชจ๋“  AWS access key ๊ต์ฒด ๋ฐ ์‚ญ์ œ

AWS ๊ณ„์ • ๋ณด์•ˆ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ ๊ผญ ์ง€์ผœ์•ผ ํ•˜๋Š” ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€

๋Œ“๊ธ€