취약점을 해결하거나 공격을 약화시키는 방법이다.
1. php 5.4.0 RC버전과 앞으로 나올 PHP 5.3.9 버전 (취약점 해결)
max_input_vars 설정으로 파라미터 개수를 제한한다.
2. 기존 php버전에서 (완벽한 해결이 아닌 공격을 약화시키는 방법)
php.ini 설정값 (default)
post_max_size = 8M
max_input_time은 요청 데이터를 파싱하는데 걸리는 최대 시간이다.
max_input_time으로 파싱 시간 제한, post_max_size으로 POST 사이즈를 제한함으로써 파라미터수를 어느정도(?) 제한하는 효과를 갖는다. 완벽한 해결이 아닌 공격을 약화시키는 방법이다.
기존에 쌓아둔 웹로그를 분석해서
- 스크립트의 실행 시간이 얼마나 걸리는지 (max_input_time 설정위해. 웹로그 시간은 정확히는 전송시간 + max_input_time + max_execution_time과 관련)
- POST 요청의 사이즈를 분석한다. (post_max_size 설정위해)
(예 : max_input_time = 10, post_max_size = 100K)
단, 파일이 업로드되는 서비스는 POST사이즈가 크므로 post_max_size는 적용하기 어렵고, max_input_time만 설정해볼 수 있다.
3. 수호신(suhosin) php 보안 모듈 사용 (취약점 해결)
suhosin.post.max_vars = 500
suhosin.request.max_vars = 500
수호신 모듈을 사용하면 위 설정만으로도 문제가 해결된다. 최대 파라미터 개수를 500개로 제한한 경우이다. default는 1000이다. 다음과 같이 차단되었음을 확인할 수 있다.
4. apache와 nginx에서 POST사이즈 제한 (100K로 제한하는 예)
POST사이즈 제한을 php설정 외에 웹서버 자체 설정도 적용하고 싶다면 다음과 같이 한다. 위 2번에서 설명한대로 기존 웹로그를 분석해서 적절한 POST사이즈를 파악해서 적용한다.
1) apache
LimitRequestBody 100000
2) nginx (defaul는 1MB)
client_max_body_size 100k;
※ 다음은 php.ini의 max_input_time 설정을 착각하는 분들이 있어 정리했다. (1.4(수) 19시)
위에서 말한대로, php.ini 설정 중 max_input_time은 HTTP '요청 데이터(POST, GET)를 파싱하는데 걸리는 시간'이다. 'input' 이라는 단어가 들어가기 때문에, 전송되는 시간으로 착각하는 경우가 있다. 하지만 모든데이터를 다 받은 순간부터 실행 시작하기까지의 시간이다. 아래에서 3번에 해당하는 구간이다.
정상적인 요청이라면 파싱하는데 걸리는 시간은 짧다. 그래서 이 수치를 줄임으로써 어느정도의 효과가 있다.
'시스템이야기' 카테고리의 다른 글
SSD기반 Scale-out NAS 스토리지 (8) | 2012.05.08 |
---|---|
PHP 5.3.9 Released(HashDoS 문제 해결 버전) (0) | 2012.01.11 |
php에서 hash table DoS(HashDoS) 공격 방어 (2) | 2012.01.04 |
웹서버 hash table DoS(HashDoS) 공격 (중요. PHP, ASP 등 해당) (7) | 2012.01.02 |
아파치 웹서버, DoS 취약점 해결한 버전 발표 (2) | 2011.08.31 |
아파치 웹서버를 한방에 다운시키는 Range요청 취약점 (2) | 2011.08.30 |
댓글을 달아 주세요
감사합니다,,^^
2012.01.06 09:21 [ ADDR : EDIT/ DEL : REPLY ]예. 대처 잘 하세요. ^^
2012.01.06 12:21 신고 [ ADDR : EDIT/ DEL ]