문서의 이전 판입니다!
Apache HTTPD 보안취약점 점검
Method 제한
전역설정으로 제한 걸기
<Location "/*"> <LimitExcept GET POST> Order deny,allow Deny from all </LimitExcept> </Location>
Apache httpd logfile permission(umask)
아파치 웹서버 로그 파일은 기본적으로 644로 생성된다. 이것은 실행하는 루트의 기본 umask가 0022로 설정되어있기 때문이다.
따라서 웹서버를 기동하는 계정의 기본 umask값만 변경하면 자동으로 설정된다.
하지만 계정의 기본값은 그대로 두고 아파치 웹서버의 설정변경만 하고 싶은경우 아래와 같이 설정하도록 한다.
envvars 사용법
apache 기동 스크립트인 apachectl
내에 보면 envvars 파일을 로딩하는 부분이 존재한다. (소스 설치인경우)
# pick up any necessary environment variables if test -f /APP/httpd-2.4.39/bin/envvars; then . /APP/httpd-2.4.39/bin/envvars fi
위와같이 envvars 파일을 로딩하는 부분이 존재한다면 envvars
파일 내에 umask 설정을 추가해주면 된다.
umask 0027 #<- 반드시 4자리 설정을 하여야 한다.
apachectl 자체를 수정하는 방법
만약 apachectl
스크립트 내에 envvars를 로딩하는 부분이 없다면 (Redhat JBCS(Jboss core services)의 경우 존재하지 않음) apachectl 내에 직접 수동으로 umask 설정을 넣어주면 된다.
umask 0027 #<- 이경우에도 반드시 4자리로 설정한다.
위의 모든 방법을 써도 안되는경우 그냥 실행하는 계정의 umask
값을 수정하는 수밖에 없다.
Host Header Poisoning / Injection
HTTP Host Header 변조 공격을 방지하기 위해서는 아래와 같이 설정하여야 한다.
- Apache HTTPD 의 경우
www.example.com
과 example.com
도메인만 허용할 경우
RewriteEngine On RewriteCond %{HTTP_HOST} !^(www.example.com|example.com)$ [NC] RewriteRule .* - [F]
- JBoss EAP 7 의 경우 Undertow 하위 시스템의
expression-filter
를 사용하십시요
/subsystem=undertow/configuration=filter/expression-filter=host-checker:add(expression="not(equals(%{i,Host}, www.example.com) or equals(%{i,Host}, example.com)) -> response-code(403)") /subsystem=undertow/server=default-server/host=default-host/filter-ref=host-checker:add
결과 xml 파일은 아래와 같습니다.
<subsystem xmlns="urn:jboss:domain:undertow:3.1"> <buffer-cache name="default"/> <server name="default-server"> ... <host name="default-host" > ... <filter-ref name="host-checker"/> </host> </server> <filters> ... <expression-filter name="host-checker" expression="not(equals(%{i,HOST}, www.example.com) or equals(%{i,HOST}, example.com)) -> response-code(403)"/> </filters> </subsystem>
- JBoss EAP 6의 경우
rewrite
하위 시스템을 사용하십시요
<subsystem xmlns="urn:jboss:domain:web:2.1" default-virtual-server="default-host" native="false"> <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/> <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp"/> <virtual-server name="default-host" enable-welcome-root="true"> <alias name="localhost"/> <alias name="example.com"/> <!-- added --> <rewrite pattern="^/(.*)$" substitution="-" flags="F"> <condition test="%{HTTP:HOST}" pattern="!(www.example.com|example.com)" flags="NC"/> </rewrite> </virtual-server> </subsystem>
참조링크
로그인하면 댓글을 남길 수 있습니다.