카테고리 Archives: Server engineering

apache 에 mod_security2 를 OWASP 룰셋으로 적용

이건 매우 상급 이니까.  아 해봐야지 하고 덤볐다가는 멘탈 붕괴가 무엇인지 느끼게 해준다 =ㅅ=a

apache web server 에 mod_security를 도입하고 OWASP 룰셋를 적용한다음에 관리하는 방법까지 이다.

먼저 mod_security 를 설치 를 위한 의존성 프로그램 을 설치한다.

그후 다운 로드 및 설치.

그다음 httpd.conf 에 불러오는 설정을 해야 겠지요 ‘ㅅ’a

물론 Include 경로를 자신이 운영하는 웹서버 경로에 바꿔야 하는걸 잊지 말자.

음 mod_security 설치는 되었다.

 

이제 룰셋 적용부분.. http://www.modsecurity.org/rules.html

공식 사이트에서는 아래와 같이 두가지 를 추천하고 있다.

무료 – OWASP ModSecurity Core Rule Set (CRS)
유료 – Commercial Rules from Trustwave SpiderLabs

물론 다른 방화벽 업체에서도 룰셋 제공을 하고 있다.

무료 – Comodo Web Application Firewall (CWAF)

여시서는 OWASP 룰셋을 적용할 예정이다.

OWASP 는 (The Open Web Application Security Project) 오픈소스 웹 애플리케이션 보안 프로젝트 이다 자세한 설명은 http://ko.wikipedia.org/wiki/OWASP 요기서 참조 ‘ㅅ’a

여기까지가 설치 완료는 아니고 사용할 룰셋을 익티베이트 룰셋 폴더에 심볼링 링크를 건다.

이후 owasp-modsecurity-crs 요 폴더를 자신의 httpd.conf 에서 불러 오도록 하면 되겠다.

 

호환성에 염두하지 않고 보안 적인 취약점을 막기 위해 제작된 룰셋이기 때문에

바로 돌리면 사이트가 안뜬다 -_-;;

먼저 php.ini 수정이 필요하다.

 

modsecurity_crs_10_setup.conf 파일에 아래부분을 추가 한다.

SecRuleEngine On -> DetectionOnly 로 설정하면 감시만 하고 실제 차단은 하지 않는다.

다만 이 디텍트모드에서 기존 사이트 운영중인것에서 걸리는 룰셋을 수정 하거나 해제 해야 한다.

httpd.conf 를 수정한다.

위와 같이  SecRuleRemoveById 으로 제거를 할수 있으며 디렉토리 혹은 파일명까지 지정하여 사용할 수 있다.

혹은 아래와 같이 가상호스트에서 특정 호스트만 룰셋(SecRuleEngine Off)적용을 끄거나 특정룰만 제거(SecRuleRemoveById)할 수도 있다.

Ajax 를 사용하는 경우 SecRequestBodyAccess On, SecResponseBodyAccess On 두개의 옵션 때문에

Ajax 가 비정상 동작을 할수 있는데 이것역시 Location 혹은 VirtualHost 에서 각기 Off 가 가능하다.

 

정리 하자면 사용할수 있는것은 아래 4가지 이며.

SecRuleEngine Off
SecRequestBodyAccess Off
SecResponseBodyAccess Off
SecRuleRemoveById 룰셋ID

이 일부 혹은 전체 끄는 옵션을을 VirtualHost 혹은 LocationMatch 안에 넣어 일부 허용만 할 수 있다.

 

아래는 이러한 룰셋을 분석하기 위해 아파치의 error_log 를 분석하기 위한 명령어 이다.

 

모드 시큐리티는 apache / nginx 에 도입이 가능하다.

다만 nginx 는 테스트 결과 룰셋에 걸리는 웹접근이 이루어 질때 메모리 및 CPU 가 과다 사용이 되고

kernel – oom – killer 에 의해 프로세스가 강제 종료되는 사례가 발생하였다.

nginx 에서의 모드시큐리티 사용은 좀더 두고 봐야 할것이라고 생각된다.

 

CVE-2015-0235 취약점 ‘ㅅ’a

□ 개요
>  미국 US-CERT는 리눅스 GNU C 라이브러리(glibc)에서 임의코드를 실행할 수 있는 취약점(CVE-2015-0235)이 발견되었다고 발표
※ CVE-2015-0235는 해당 라이브러리의 gethostbyname( ) 함수 처리 과정에서 발생하는 버퍼오버플로우 취약점
※ GNU C 라이브러리 : 리눅스 계열 운영체제에서 기본적으로 사용하는 소프트웨어

 

□ 취약점 내용
>  라이브러리에 존재하는 특정 함수(__nss_hostname_digits_dots( ))의 잘못된 메모리 사용으로 인해 오버플로우가 발생하여 프로그램의 실행 흐름 변경이 가능
※ __nss_hostname_digits_dots( ) 함수 : 도메인 주소를 IP 주소로 변환할 때 사용하는 함수인 gethostbyname( )를 호출 시 내부적으로 호출되는 함수

 

□ 해당 시스템
>  영향을 받는 시스템
– glibc 2.2~2.17버전의 모든 리눅스 시스템

 

□ 해결 방안
>  취약한 버전의 라이브러리를 사용하는 시스템은 상위 버전으로 업데이트
※ 실행파일에 취약한 버전의 라이브러리를 포함하여 컴파일 한 경우, 상위 버전의 라이브러리로 재컴파일 하여 설치 필요
>  다음 참고사이트의 내용을 참조하여 보안업데이트 수행
– CentOS [1] http://lists.centos.org/pipermail/centos/2015-January/149413.html
– Debian [2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776391
– Redhat [3] https://access.redhat.com/articles/1332213
– Ubuntu [4] http://www.ubuntu.com/usn/usn-2485-1

 

————————————————————————-

음 뭐 그렇다고 한다. ‘ㅅ’

먼저 패치가 된 서버인지 점검..

위와같이 fix 가 되었다는 changelog 가 없다면 패치가 필요하겠다.
( if can’t see the highlight message look like. You  should be patch glibc on server. )

 

윰 만든사람들 최고 ‘ㅅ’b

발빠른 업데이트 내놓는 사람들 최고 ‘ㅅ’b

설치 후 리부팅이 필요 하니 주의 하자. ( caution : it’s necessary reboot server when updated glibc. )

 

swap 파티션 잡는법.

발생 사유는 잘 모르겠지만.

top 명령으로 서버 자원을 보았을때.

위와 같이 Swap:        0k total,        0k used,        0k free,        0k cached 으로 스왑이

잡혀 있지 않는 경우가 발생하였다 ‘ㅅ’aaa

 

리부팅 해도 변함없이 0으로 잡혀 있을때 아래와 같이 스왑 파티션을 잡아주면 된다.

 

위의 명령으로 안된다면 파티션이 swap 으로 잡혀 있지 않거나 파티션 초기화가 안되었을 수 있다.

파티션은 fdsik 를 이용해서 잡고 swap 파티션 초기화는 아래 명령을 이용하여 재시도 한다.

 

 

CentOS4 – yum 사용이 안될때.

yum 의 base repo 주소가 변경되면서 그냥 설치후에는 yum 을 사용할 수 없다.

 

/etc/yum.repos.d/CentOS-Base.repo  파일을 아래와 같이 수정 해주면 사용할수 있다. 🙂

 

MS-SQL 인젝션 침해코드 삭제.

ASP 의 경우 인젝션 침해가 자주 발생한다.

문제는 백업 스케쥴링에 의한 백업 데이터가 없거나.

혹은 최근 업데이트된 자료가 소중하여 복원을 할수 없을때 생긴다 ‘ㅅ’a

 

아래는 인젝션 침해된 소스 코드를 NULL 로 치환해 주는 ms-sql 용 쿼리문이다.

원래대로라면 IIS 의 선언된 사이트를 중지 시키고 해야 겠지만 아래와 같은 쿼리문으로

진행 할경우 현재 sql connect 된 접속을 끊고 진행하기 때문에 편하다 =3=a

하이라이트 부분인 1, 13, 27번째줄을 수정 하면 된다.

특히 13번째줄 “아이디 혹은 dbo” 부분은 번갈아 바꿔가면서 하면 된다 ‘ㅅ’a

한번에 안되면 번갈아 가며 하다보면 된다 ‘ㅅ’a