♥️7분 빠른 소식 전달해 드립니다♥️
[정보보안] 웹서버 해킹 본문
12bme 2017.05.28 17:09
웹서버 해킹은 "네트워크 해킹"으로 알려진 더 큰 영역의 일부입니다. 대부분의 사람들에게는 아주 잘 알려진 도구를 사용하고 매체를 통해 널리 광고되기도 했으므로 해킹을 처음 시도해보는 사람들조차 파고들어가고픈 영역이기도 합니다.
네트워크 해킹에서 보안과 관련한 사람들이 반드시 알아두어야 하는 확실한 도구와 기술이 존재합니다. 이런 사항은 우리가 공격할 웹 서버가 웹 애플리케이션을 호스팅합니다. 네트워크를 해킹할 때 Nmap, Nessus, Metasploit 같은 도구는 보안을 연구하는 모든 사람들이 잠재적으로 사용하게 되는 중요한 것들입니다. 스스로 해킹 기술을 한 단계에 올리고자 한다면 이러한 기본적인 도구의 쓰임새를 마스터해야 합니다.
"뛰려면 먼저 걸어야 한다"
이런 도구에 관한 전문적인 책과 자원은 엄청나게 많지만, 특별히 웹 서버를 목표로 공격할 때는 양상이 조금 다릅니다. 전통적인 네트워크 해킹은 아주 조직적인 방법론을 따릅니다. 웹서버를 네트워크 서비스로 보고 공격할 때 사전 조사, 포트 스캐닝, 취약점 찾기, 공격하기 절차를 수행하게 됩니다.
웹 서버의 robots.txt 파일을 수동으로 검사하여 웹 서버 운영자가 검색엔진의 결과에 포함되길 원치 않는 디렉터리가 무엇인지 알아볼 필요가 있습니다. 이 안에는 웹 서버 안의 민감한 정보에 이르는 잠재적인 로드 맵이 들어있는데 직접 설치한 웹 서버에서 쉽게 확인해 볼 수 있습니다. 또한 Nikto와 같이 웹 서버의 취약점을 전문적으로 찾는 해킹 툴도 사용해보는 등 전통적이고 무르익은 네트워크 해킹 기술과 도구를 써서 웹서버를 해킹할 수 있습니다.
사전조사
사전조사(또는 정보수집이라고도 부르는) 단계에서는 이를테면 IP 주소, 네트워크 토폴로지, 네트워크에 연결된 장치들, 사용되는 기술, 패키지 버전 등 목표물에 대해 가능한 한 많은 정보를 수집하게 됩니다. 사전조사와 연관된 도구가 많지만 서버 (고유의 숫자) IP 주소를 얻기 위하여 우선 host와 Netcraft에 집중하고, 목표 환경에 대한 더 많은 정보를 얻기 위하여 robots.txt를 검사하게 됩니다.
사전조사는 네트워크 기반 공격에서 아주 중요합니다. 그렇기 때문에 사전조사에 많은 시간이 걸리더라도 네트워크 공격을 성공시키기 위한 기본 바탕이 되므로 충분히 시간을 갖고 대응해야 합니다. 또한 정보를 수집할 때는 모든 것을 기록하는 것이 좋습니다. 툴을 쓸때는 원래의 결과 값을 저장하고 인상적인 URL이나 IP 주소, 전자우편 주소와 다른 주목할 만한 토막뉴스 등을 모읍니다. 전문적으로 침투 테스트를 할 때에도 원래의 결과 값을 필요할 때마다 저장하여 고객에게 최종 보고서를 제출할 때 첨부하는 것이 좋습니다.
웹 서버에 대해 배우기
우리가 웹 서버를 목표로 하는 이유는 웹 서버가 네트워크 외부에서 접근할 수 있게 설계되었기 때문입니다. 웹 서버의 주 용도는 내부 네트워크 밖의 사용자가 접근할 수 있는 웹 애플리케이션을 호스팅하기 위한 것입니다. 그렇기 때문에 네트워크로 진입하는 창과 같은 역할을 합니다. 웹 서버에 대해 조사하려면 우선 외부 IP 주소를 알 필요가 있습니다. 우리는 보통 목표 웹 애플리케이션의 http://syngress.com/과 같은 URL을 IP 주소로 바꾸는 것으로부터 시작하게 됩니다. URL은 보통 사용자가 쉽게 기억할 수 있는 문자형식인데 반해, IP 주소는 웹 서버의 고유의 숫자 주소를 의미합니다. 네트워크 해킹 툴은 일반적으로 웹 서버의 IP 주소를 사용하는 데 사용자가 호스트명을 쓰더라도 컴퓨터는 눈에 띄지 않게 자동으로 주소를 찾아봅니다. URL을 IP 주소로 바꾸려면 다음과 같이 터미널 창에서 host 명령을 쓰면 됩니다. ( 도메인명으로 IP 확인 )
> host syngress.com
이 명령은 다음의 내용을 결과 값으로 회신하는데 외부 IP 주소를 첫 번째 항목으로 보여줍니다. 다른 항목들은 전자우편 서비스와 관련 있으며 나중에 사용될 수 있으므로 보관하는 것이 좋습니다.
웹 브라우저는 IP 주소와 URL의 어떤 것으로도 웹 서버가 호스팅하는 웹 애플리케이션의 홈페이지를 가져옵니다. 그래서 웹 서버의 정확한 IP 주소를 알게 되면 웹 브라우저에 직접 입력하여 도메인과 같은 목적지에 닫는지 확인해볼 필요가 있습니다.
Robots.txt 파일
웹 서버에서 무엇이 실행되는지 이해하려면, 그 서버의 robots.txt 파일을 보는 것으로 시작하는 것이 좋습니다. Robots.txt 파일에는 웹 크롤러가 색인 작업할 때 포함하지 않길 바라는 웹 서버의 디렉터리와 파일 목록을 담고 있기 때문입니다. 웹 크롤러는 Google이나 Yahoo와 같은 검색엔진에서 가장 일반적으로 사용하는 형태로서의 웹 정보 목록을 만들고 기록하는 소프트웨어를 말합니다. 이러한 웹 크롤러는 인터넷 검색 기능의 정확도와 성능을 향상시키기 위하여 인터넷을 샅샅이 누비며 찾은 모든 것을 목록화(기록화)합니다.
해커에게 robots.txt 파일은 민감한 정보를 확인하는 지침서와도 같은데, 웹서버의 robots.txt 파일은 브라우저에서 간단히 URL을 입력하여 얻어질 수 있기 때문입니다. 즉 브라우저 주소 창에 URL 뒤에 /robots.txt만 덧붙이면 다음과 같은 robots.txt 파일이 쉽게 얻어집니다.
User-agent: *
# Directories
Disallow: /modules/
Disallow: /profiles/
Disallow: /scripts/
Disallow: /themes/
# Files
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /INSTALL.mysql.txt
Disallow: /INSTALL.pgsql.txt
Disallow: /install.php
Disallow: /INSTALL.txt
Disallow: /LICENSE.txt
Disallow: /MAINTAINERS.txt
Disallow: /update.php
Disallow: /UPGRADE.txt
Disallow: /xmlrpc.php
# Paths (clean URLs)
Disallow: /admin/
Disallow: /logout/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/
# Paths (no clean URLs)
Disallow: /?q=admin/
Disallow: /?q=logout/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/
Robots.txt 파일은 다음과 같이 네 부분으로 나뉩니다.
1. 디렉터리
2. 파일
3. 경로 (깨끗한 URL)
4. 경로 (깨끗하지 않은 URL)
깨끗한 URL은 브라우저에 경로를 복사하고 붙여 넣을 수 있는 절대 경로를 말하는데 반해, 깨끗하지 않은 URL은 앞의 경우와 같이 매개변수 "q"가 붙어있는 것을 말합니다. 이것은 빌더 페이지(builder page)라고 부르기도 하는데, 전적으로 전달되는 URL 매개변수에 근거한 데이터를 얻기 위해 사용됩니다. 디렉터리와 파일은 글자 그대로 입니다.
모든 웹 서버는 루트 디렉터리에 robots.txt 파일을 가지는데, 만일 그렇지 않다면 웹 크롤러는 데이터베이스와 파일을 포함한 모든 것에 대해 색인화합니다. 하지만 어떤 웹 관리자도 이런 정보가 Google 검색의 일부가 되길 희망하지 않습니다. 웹 서버의 루트 디렉터리는 실질적으로 웹 서버 소프트웨어가 설치된 호스트 컴퓨터의 물리적 디렉터리입니다. 윈도우에서 루트 디렉터리는 보통 C:/inetpub/wwwroot/가 기본이고, 리눅스에서는 /var/www/와 비슷한 곳을 씁니다.
완전히 정반대의 기능을 하도록 웹 크롤러를 만든다면 막을 수 있는 방법은 없습니다. 그러니까 오히려 robots.txt에 명시된 것들만 가져오게 해서 여러 웹 서버를 사전조사하는 경우 상당한 시간을 절약할 수 있습니다. 그렇지 않다면 브라우저에 각 robots.txt를 수동으로 요청하고 검토해야만 합니다. Robots.txt파일은 자동화된 웹 크롤러 입장에서 볼 때 완전한 장애물이지만 사람인 해커가 이 민감한 정보를 검토한다면 과속방지턱의 역할도 할 수 없을 만큼 가볍습니다.
포트 스캐닝
포트 스캐닝은 간단히 말해 목표 컴퓨터에 어떤 포트가 열려있는지 확안히는 절차입니다. 이 결과를 바탕으로 동작하는 서비스를 알 수 있습니다. 컴퓨터의 포트는 그것이 정문이든, 옆 문이든, 혹은 주차장 문이든 간에 집으로 들어오는 출입구와 같습니다. 집의 비유를 더 하자면, 서비스란 집으로 들어올 것으로 예상되는 길로 전달되는 트래픽입니다. 예를 들어 판매원은 정문을 이용하고, 집주인은 주차장 문을 이용하면, 친구들은 옆 문을 이용한다고 하자. 여기서 판매원이 정문을 이용하는 것과 마찬가지로 특정 서비스는 컴퓨터의 특정 포트를 사용한다고 볼 수 있습니다. HTTP 트래픽은 80을, HTTPS 트래픽은 443 포트를 표준으로 사용합니다. 그래서 만일 80과 443 포트가 열려있는 것을 찾는다면 우리는 HTTP와 HTTPS가 동작하고 있으므로 그 컴퓨터는 아마도 웹 서버라고 확신할 수 있습니다. 이처럼 포트 스캐닝을 할 때 우리는 다음의 세 가지 질문을 염두에 두어야 합니다.
1. 열린 포트는 어떤 것인가?
2. 그 포트에서 동작하는 서비스는 무엇인가?
3. 어느 버전의 서비스가 돌고 있는가?
만일 이러한 질문에 정확한 답을 할 수 있다면 공격의 기초는 아주 튼튼한 셈입니다.
Nmap
Nmap은 가장 널리 사용되는 포트 스캐너로서 http://nmap.org/에서 상당한 수준의 문서를 참조할 수 있습니다. 1997년 Gordon "Fyodor" Lyon이 첫 버전을 출시한 이래 Nmap에 는 취약점 스캐닝 및 공격 분야의 기능이 계속 추가되면서 세계에서 가장 뛰어난 포트스캐너의 기세를 이어오고 있습니다.
Nmap 업그레이드
Nmap을 처음 사용하기 전에 터미널에서 nmap -V 명령을 실행하여 가장 최신 버전인지 꼭 확인해야 합니다. 업데이트 시에는 터미널에서 apt-get upgrade nmap 명령을 입력하면 됩니다. 설치가 끝난 후 버전 6 또는 그 이상으로 제대로 되었는지 확실히 하기 위해 다시금 nmap -V 명령을 쳐보는 게 좋습니다.
Nmap 실행
Nmap에는 몇가지의 탐색 유형과 기능을 추가하는 스위치가 있습니다. 우리는 이미 우리가 운영하는 웹서버의 IP 주소를 알고 있기 때문에 Nmap이 해당 호스트에 대해 찾는 (즉 서버의 IP 주소를 확인하는) 과정을 뛰어넘어 웹 서버의 포트, 서비스, 버전같이 쓸모 있는 정보를 수집하는 데 더 관심을 갖는 것이 좋습니다. 자체 호스트(127.0.0.1)에 설치된 DVWA 웹서버에 대해 터미널에서 다음의 명령으로 Nmap을 실행합니다.
Nmap -sV -O -p- 127.0.0.1
-sV 옵션을 추가하면 서비스 버전 정보를 얻는다.
-O 옵션을 추가하면 운영체제의 종류와 버전 정보를 얻는다.
-p- 옵션으로 모든 포트를 스캔한다.
127.0.0.1는 목표로 하는 IP다.
Nmap의 가장 흥미로운 기능 중 하나는 원격 운영체제를 식별해서 목표 시스템에서 동작하는 서비스와 그 버전 정보를 얻어노느 점입니다. Nmap은 원격 호스트에 일련의 패킷을 보내고 그 응답 값을 2,600개 이상의 알려진 운영체제 지문정보를 담고 있는 nmap-os-db 데이터베이스의 내용과 비교합니다. 우리가 일차적으로 스캔한 정보는 다음과 같습니다.
$ nmap -sV -O -p- 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2017-05-28 12:07 KST
Nmap scan report for 127.0.0.1
Host is up (0.0024s latency).
Not shown: 65529 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd
443/tcp open ssl/http Apache httpd
3478/tcp closed unknown
3479/tcp closed twrpc
8000/tcp closed http-alt
8443/tcp closed https-alt
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.32
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit .
Nmap done: 1 IP address (1 host up) scanned in 120.68 seconds
$ nmap -sV -O -p- 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2017-05-28 12:23 KST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000085s latency).
Not shown: 65531 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
25/tcp open smtp Postfix smtpd
80/tcp open http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.1e-fips)
443/tcp open ssl/http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.1e-fips)
No exact OS matches for host (If you know OS is running on it, see httpd://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=6.40%E=4%D=5/28%OT=22%CT=1%CU=34930%PV=N%DS=0%DC=L%G=Y%TM=592A42E
OS:0%P=x86_64-redhat-linux-gnu)SEQ(SP=FC%GCD=1%ISR=FE%TI=Z%CI=I%II=I%TS=A)O
OS:PS(O1=MFFD7ST11NW7%O2=MFFD7ST11NW7%O3=MFFD7NNT11NW7%O4=MFFD7ST11NW7%O5=M
OS:FFD7ST11NW7%O6=MFFD7ST11)WIN(W1=AAAA%W2=AAAA%W3=AAAA%W4=AAAA%W5=AAAA%W6=
OS:AAAA)ECN(R=Y%DF=Y%T=40%W=AAAA%O=MFFD7NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O
OS:%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=
OS:0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%
OS:S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(
OS:R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=
OS:N%T=40%CD=S)
Network Distance: 0 hops
Service Info: Host: dev-web.localdomain
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 45.48 seconds
$ nmap -sV -O -p- 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2017-05-28 12:31 KST
Nmap scan reposrt for 127.0.0.1
Host is up (0.0016s latency).
Not shown: 65530 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.4 (protocol 2.0)
80/tcp open http Apache httpd 2.2.15 ((CentOS))
3306/tcp open mysql MySQL 5.6.31
8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
8480/tcp open http Apache Tomcat/Coyote JSP engine 1.1
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purposr|storage-misc|WAP|load balancer
Running (JUST GUESSING): Linux 2.6.x (97%), Netgear Linux 2.6.x (93%), Linksys embedded (91%), Vodafone embedded (90%), F5 Networks embedded (88%)
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:netgear:linux_kernel:2.6 cpe:/h:linksys:befw11s4 cpe:/h:vodafone:easybox_802
Aggressive OS guesses: Linux 2.6.32 (97%), Netgear ReadyNAS 3200 NAS device (Linux 2.6) (93%), Linksys BEFW11S4 WAP (91%), Vodafone EasyBox 802 wireless ADSL router (90%), Linux 2.6.11 - 2.6.18 (89%), F5 BIG-IP load balancer (88%)
No exact OS matches for host (test conditions non-ideal).
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 119.52 seconds
이 결과에서 포트, 상태, 서비스, 버전의 네 가지 항목을 찾을 수 있을 것입니다. 위에서 보이는 행의 개수는 해당 웹 서버의 운영 중인 서비스의 갯수를 의미합니다. 이 컴퓨터에서 어떤 것이 동작되고 있는지는 자명하더라도(물론 VM에서 돌리고 있는 것에 따라 그 결과는 조금 다를 수도 있지만), 각각의 내용을 살펴봄으로써 Nmap 결과를 똑같이 이해하는 것이 중요합니다.
정확한 서비스와 버전 정보를 알아두면 이후에 취약점을 찾고 침투하는 단계에 큰 도움이 됩니다. 그 외에 커널 버전, 운영체제 빌드에 관한 세부정보와 네트워크 홉 수 등에 대한 부가정보도 있습니다.
자체 호스트를 상대로 Nmap을 돌리면 실제로 다른 컴퓨터에서 응답 대기하는 포트를 쓸 수 없으므로 자기기만 적일 수 있습니다. 컴퓨터는 같은 근거리 통신망(Local Area Network, LAN) 안에 있거나 또는 완전히 LAN 바깥에 있을 것입니다. 127.0.0.1은 자체 호스트이므로 모든 컴퓨터가 자기 자신과 통신할 때 사용하는 되돌림 주소입니다. 외부 사용자가 본 컴퓨터에서 이용할 수 있는 것을 분명히 알려면 두 개의 서로 다른 컴퓨터에서 Nmap 스캔을 동작시켜야 합니다. 네트워크 안에서 돌리고, 네트워크 바깥에서 돌리는 식입니다. 그런 경우 세 가지의 스캔 결과를 서로 비교해볼 수 있습니다. 이런 고려가 결정적으로 중요하다고 할 수는 없어도 어떤 환경에서 스캔하는가에 따라 다른 결과를 얻을 수 있음을 깨닫는 것은 중요합니다.
Nmap 스크립트 엔진
Nmap은 특별한 스캔을 수행하는 스키립트를 포함하여 그 기능성을 넓혀왔습니다. 사용자는 단순히 스크립트와 그 스크립트에서 필요로 하는 매개변수를 호출하면 됩니다. Nmap 스크립트 엔진(Nmap Scripting Engine, NSE) 이 이런 기능을 다루기 때문에 우리는 운 좋게도 웹에 특정한 수많은 스크립트를 바로 사요할 수 있습니다. 거의 400개의 Nmap 스크립트(정확하게는 396개)가 있으므로 그 중 쓸만한 것 몇 개를 찾을 수 있다고 확신해도 좋습니다. 현재 통용되는 모든 NSE 스크립트와 문서는 http://nmap.org/nsedoc/ 에서 확인 가능합니다.
모든 NSE 스크립트를 이용할 때는 Nmap 스캔 문법의 일부로서 --script=
'IT' 카테고리의 다른 글
ubuntu 18.04 네트워크 설정 (0) | 2019.07.26 |
---|---|
centos 7에서의 fail2ban 설치 (0) | 2019.07.26 |
[정보보안] 인증과 세션을 이용한 웹애플리케이션 공격 (0) | 2019.07.13 |
[정보보안] 개인정보 비식별화란? (0) | 2019.07.13 |
[정보보안] 비식별화 (k-익명성, l-다양성, t-근접성) (0) | 2019.07.13 |