ํฐ์คํ ๋ฆฌ ๋ทฐ
๊ฐ์
2009๋ ๋ณด์์ฐ๊ตฌ์ ์ด์๋ Moxie Marlinspike ๊ฐ ์ฒ์์ผ๋ก ๋ฐํํ๋ ๊ณต๊ฒฉ์ ๋๋ค. HTTPS(HyperText Transfer Protocol over Secure Socket Layer) ๋ผ๋ ๊ณต๊ฐํค ์ํธํ ์ฐ๊ฒฐ์ ์ฌ์ฉํ๊ณ ์๋ ์น์ฌ์ดํธ๋ฅผ HTTP ํต์ ์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ ์์ผ ๋ฒ๋ฆฌ๋ ์ผ์ข ์ MITM(Man In The Middle attack) ๊ณต๊ฒฉ ์ ๋๋ค.
์ด ์ทจ์ฝ์ ์ ์ฌ๋ฏธ์๋์ ์ ๊ณต๊ฒฉ์ ๋นํด๋ SSL ์ธ์ฆ์ ์ค๋ฅ์ ๊ด๋ จํ์ฌ ๋ฐ๋ก ์ฌ์ฉ์ ์ธก์ ๋ฐ๋ก ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ SSL Strip ๊ณต๊ฒฉ์ด ๋ฐ์ํ๊ณ ์๋ค๋ ๋จ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ด๋ป๊ฒ ๋ฐ์๋๋๊ฐ
์ฒซ๋ฒ์งธ๋ก ARP Spoofing์ ํตํด ARP Table์ ์ค๋ ์ํค๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ๊ณต๊ฒฉ์์ ๋ฌด์ ๋คํธ์ํฌ์ ๋ค์ด์ค๋๋ก ์ ์ธํ๋ ๊ฒ์ ๋๋ค.
์ฌ์ฉ์๊ฐ ์น ์๋ฒ์ ์ธ์ ์ ํ๋ฆฝ ์ ์ฒซ ๋ฒ์งธ๋ก TCP ํต์ ์ ํ๊ณ ๊ทธ ํ๋ TLS / SSL๋ก ๋ฆฌ๋ค์ด๋ ์ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ๊ณต๊ฒฉ์๋ SSL์ ๋ฒ๊ฒจ ๋ค์ด๊ทธ๋ ์ด๋ ์ํค๊ณ ์ค๊ณ ๊ฐ๋ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ํ์ณ๋ณผ ์ ์์ต๋๋ค.
ํ์์ฒ๋ผ ํฐ์คํ ๋ฆฌ ํ์ด์ง์ ์ ์ํ๋ฉด ์๋จ์ ๋ณด์ด๋ ์๋ฌผ์ ์ฒ๋ผ ์ํธํ ํต์ ์ ํ๊ณ ์๊ธฐ์ ๋ก๊ทธ์ธ ์ ๋ฏผ๊ฐ์ ๋ณด๊ฐ ํจํทํ๋ฆ์์์ ๋ ธ์ถ๋์ง ์๊ณ ์์ต๋๋ค.
๋์ผํ ๋คํธ์ํฌ์ ์ ์ ํด์๋ ๊ณต๊ฒฉ์๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ํ๋ํ๊ธฐ ์ํด ARP ์ค๋ ์ ์ํค๊ณ ๊ฐ์ ๋ก ํ๋ฌธํต์ ์ธ HTTP๋ก ํต์ ํ๋๋ก ์๋ํ ์ ์์ต๋๋ค.
<!-- ARP Spoofing ์๋ -->
arpspoof -i ์ธํฐํ์ด์ค๋ช -t ํ๊ฒIP ๊ฒ์ดํธ์จ์ดIP
arpspoof -i ์ธํฐํ์ด์ค๋ช -t ๊ฒ์ดํธ์จ์ดIP ํ๊ฒIP
<!-- IP Forwarding(ํฌ์๋ฉ) ํ์ฑํ
fragrouter -B1
echo 1 > /proc/sys/net/ipv4/ip forward
<!-- ettercap ์คํ -->
ettercap -i ์ธํฐํ์ด์ค๋ช -T -q
-T : Text ๋ชจ๋
-q : quite ๋ชจ๋ ์ฆ ๋ถํ์ํ๋ด์ฉ ์ถ๋ ฅX
<!-- ๋ชฉ์ ์ง ํฌํธ๊ฐ 80๋ฒ์ผ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ํจํท์ 1000๋ฒ ํฌํธ๋ก ๋ฆฌ๋ค์ด๋ ํธ -->
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 10000
-t nat : nat ํ ์ด๋ธ ์ฌ์ฉ
-A PREROUTING : nat ์ ์ฐ๊ด, ์ฒ์์ผ๋ก ์ ๋ฌ ๋ฐ์ ํจํท์ ์ฒ๋ฆฌํ๋ ํํฐ๋ง ์ง์
-p tcp : tcp ํ๋กํ ์ฝ ์ง์ (80๋ฒ ํฌํธ๋ ์ ๋ขฐ์ฑ)
--destination-port 80 : ๋ชฉ์ ์ง 80๋ฒํฌํธ
-j REDIRECT : jump ์ฆ ๋ฆฌ๋ค์ด๋ ์
--to-ports 1000 : SSL Strip ๊ณต๊ฒฉ์ ๊ธฐ๋ณธ์ ์ผ๋ก 1000๋ฒ ํฌํธ๋ก ์ง์ ๋์ด ์์
<!-- ๊ณต๊ฒฉ์ํํ ๋์ ๋ชจ๋ํฐ๋ง -->
tail -f sslstrip.log
* ๋ก๊ทธํ์ผ ๋น์ฐ๊ธฐ : cat /dev/null > sslstrip.log
๊ณต๊ฒฉ์ ๋นํ ํ ํ์๋๋ก www.tistory.com์ ์ ๋ ฅํ๊ณ ์ ์ํ๋ฉด ์ฃผ์์ฐฝ์ URL ๋ถ๋ถ์ ์๋ฌผ์ ๊ฐ ํ๋ ค์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ ์ธ์๋ ์๋ฌด๋ฐ ์ก์์ผ๋ก ํ์ธํ ์ ์๋ ์ด๋ฒคํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๋์น์ฑ ์ ์์ต๋๋ค.
์๋ฌด๊ฒ๋ ๋ชจ๋ฅธ ์ฑ ๋ก๊ทธ์ธ์ ์๋ํ ์ฌ์ฉ์๋ ํ์์ฒ๋ผ ์น ์ํ์ ์ฆ๊ธฐ๊ณ ์๊ฒ ์ง๋ง ๊ณต๊ฒฉ์๊ฐ ARP ์ค๋ ์ ์ํด์ผ๋ก์จ ์ค๊ฐ์ ๋ชจ๋ ํธ๋ํฝ์ ํ๋ฌธ์ผ๋ก ํ์ธํ ์๊ฐ ์๊ฒ ๋ฉ๋๋ค.
์ทจ์ฝ์ ์ด ๋ฐ์ํ ์์ธ
SSL Strip ์ด ์๊ธด ๊ธฐ์์ ์ฌ์ฉ์๋ค์ด URL ๋๋ ๋ถ๋งํฌ ๋ https:// ๋ฅผ ์ง์ ์ ๋ ฅํ์ฌ SSL ์ด ์ ์ฉ๋ ์น ์ฌ์ดํธ๋ฅผ ์ ์ํ์ง ์๊ณ ๋จ์ํ tistory.com๊ณผ ๊ฐ์ด ์ฃผ์๋ง ์ ๋ ฅํ์ฌ ๋ค์ด๊ฐ๋ค๋ ๊ฒ์ ๋๋ค.
์ฌ๋ฐ๋ฅธ ๋์๋ฐฉ์์ ์๋์ง๋ง ๊ณต๊ณต ๋คํธ์ํฌ์์๋ ์ ์ ์ ๋๋๋ก https ๊ฐ ๋ถ์ ๋งํฌ๋ฅผ ํตํด ๋ค์ด๊ฐ๊ฑฐ๋ ์ ๋ ฅ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. SSL Strip ๊ณต๊ฒฉ์ ์ด๋ฏธ ๋นํ๊ณ ์๋ค ํ๋๋ผ๊ณ https๋ฅผ ์๊ธฐ๋ก ์ ๋ ฅํด ๋ค์ด๊ฐ ์ฌ์ฉ์์ ์ ๋ณด๋ ๊ฐ์ทจํ ์ ์์ต๋๋ค.
๋ํ http(๋ฉ์ธ)์ https(๋ก๊ทธ์ธ, ๊ฒฐ์ , ํ์๊ฐ์ ๋ฑ)๋ฅผ ๋ฒ๊ฐ์ ์ฐ๋ ๊ณณ์ด ๋ง๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ SSL Strip ๊ณต๊ฒฉ์ ๋ ธ์ถ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
* ํ์ฌ ๋ค์ด๋ฒ, ๊ตฌ๊ธ, ๋ค์, ํ์ด์ค๋ถ ๊ฐ์ ๊ธ๋ก๋ฒ ํ์ด์ง์ ๊ฒฝ์ฐ ์ ๊ตฌ๊ฐ https ๋ฅผ ์ฌ์ฉ์ค
๋์ ๋ฐฉ์
๋น์ฉ๊ณผ ๋ชจ๋ Byte์ ์ ๋ณด๋ฅผ ์ฌ์ฉ์์ ์๋ฒ๊ฐ ์ํธํ ๋ฐ ํด๋ ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ ค์ง ์๋ฐ์ ์๋ ๋จ์ ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์๋น์ค์ ํ์ง ์ชฝ์ ๋ ์ค์์ ์ฌ๊ธฐ๊ณค ํฉ๋๋ค.
์ฌ๋ฐ๋ฅด๊ฒ ๋ณดํธํ๊ธฐ ์ํด์ ์ ๊ตฌ๊ฐ https๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง๋ง ์ด์ธ์๋ ์๋ฒ์ธก ์์ ์กฐ์นํ ์ ์๋ HSTS(HTTP Stric Transport Security)๋ฅผ ์ ์ฉํ๋๊ฒ์ด ์ข์ต๋๋ค.
HSTS๋ ํด๋น ์๋น์ค๋ฅผ ์ด์ฉํ๋ ์ฌ์ฉ์๊ฐ https ๋ก๋ง ์ฐ๊ฒฐ๋๋๋ก ๋ช ๋ นํ๋ ํํ์ ๋๋ค. ์ฃผ๋ก ๋ํ ํฌํธ์ฌ์ดํธ์ ๊ฒฝ์ฐ HSTS ๊ฐ ์ ์ฉ๋์ด์๋ ํธ์ด๋ฉฐ ์ด๋ฅผ ์ ์ฉํ๋ฉด SSL Strip ๊ณต๊ฒฉ์ ๋ฌด๋ ฅํ ์ํฌ ์ ์์ต๋๋ค.
// NGINX ์ค์
// includeSubDomains๋งค๊ฐ ๋ณ์๋ HSTS ์ ์ฑ
์ด ํ์ฌ ๋๋ฉ์ธ์ ๋ชจ๋ ํ์ ๋๋ฉ์ธ์๋ ์ ์ฉ
// NGINX (๋ฒ์ 1.7.5 ๋๋ NGINX Plus R5 ์ด์ )๋ always๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํ์ง ์์
server {
listen 443 ssl;
server_name www.example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
// Apache ์ค์
// includeSubDomains ์ธ์๋ฅผ ์ถ๊ฐํ๋ฉด ํ์ ๋๋ฉ์ธ์๋ ์ฐ๊ฒฐ
// 63072000 ์ด (2 ๋
)
/etc/apache2/sites-enabled/
<VirtualHost *:443>
...
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
...
</VirtualHost>
// Apache Tomcat(8.x) ์ค์
// web.xml ํ์ผ์ ํธ์ง, httpHeaderSecurity ํํฐ ์ ์ ๋ฐ <filter-mapping> ์น์
์ ์ฃผ์ ์ฒ๋ฆฌ๋ฅผ
์ ๊ฑฐํ๊ณ ์๋์ ๊ฐ์ด hstsMaxAgeSeconds ๋งค๊ฐ ๋ณ์๋ฅผ ์ถ๊ฐ
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>hstsEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxAgeSeconds</param-name>
<param-value>31536000</param-value>
</init-param>
<init-param>
<param-name>includeSubDomains</param-name>
<param-value>true</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<url-pattern>*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
'WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ShellShock(CVE-2014-6271) ์ทจ์ฝ์ (0) | 2020.10.23 |
---|---|
SNMP ์ทจ์ฝ์ ๊ณต๊ฒฉ (0) | 2020.10.22 |
๋ก์ปฌ ๊ถํ ์์น ์ทจ์ฝ์ (udev) (0) | 2020.10.20 |
XST(Cross Site Tracing) ์ทจ์ฝ์ (0) | 2020.10.19 |
Open Redirect(์คํ ๋ฆฌ๋ค์ด๋ ํธ) ์ทจ์ฝ์ (0) | 2020.10.09 |