티스토리 툴바

BLOG main image
댓글 1개에 200원 기부하겠습니다.
분류 전체보기 (207)
일상 (44)
IT이야기 (116)
시스템이야기 (47)
310,990 Visitors up to today!
Today 30 hit, Yesterday 75 hit
daisy rss
한RSS에 추가
티스토리 가입하기!
2012/01/11 18:37
Hash table 충돌을 이용한 DoS 공격(일명 HashDoS)을 해결한 PHP 5.3.9버전이 나왔습니다.
  • php 5.3.8 포함하여 이전 버전 사용중 : 필히 업그레이드 할 것
  • php 5.3.9 RC 또는 5.4.0 RC4~RC5 사용중 : 임시 업그레이드하셨던 분은 필요하면 정식 버전을 적용해도 되겠네요.

php


참고로 php.ini의 max_input_vars default값은 1000입니다.

http://www.php.net/index.php#id2012-01-11-1

The PHP development team would like to announce the immediate availability of PHP 5.3.9. This release focuses on improving the stability of the PHP 5.3.x branch with over 90 bug fixes, some of which are security related.

Security Enhancements and Fixes in PHP 5.3.9:

* Added max_input_vars directive to prevent attacks based on hash collisions. (CVE-2011-4885)
* Fixed bug #60150 (Integer overflow during the parsing of invalid exif header). (CVE-2011-4566)


* HashDoS 관련 글

- 2012/01/04 - [시스템이야기] - php에서 hash table DoS(HashDoS) 공격 방어
- 2012/01/02 - [시스템이야기] - 웹서버 hash table DoS(HashDoS) 공격 (중요. PHP, ASP 등 해당)


Trackback Address :: http://truefeel.tistory.com/trackback/207 관련글 쓰기
Name
Password
Homepage
Secret
2012/01/04 09:36
HashDoS 공격에 대해서는 '웹서버 hash table DoS(HashDoS) 공격 (중요. PHP, ASP 등 해당)'  을 읽어보기 바란다.

웹서버에서는 Request POST, GET 변수를 hash 구조로 관리한다. 그런데 POST 요청 파라미터수가 상당히 많을 경우(GET 요청은 길이 제한이 있으므로 문제가 되지 않음)에 hash 충돌이 많이 발생하게 되어 CPU load가 상당히 올라가게 된다. 이런 문제는 PHP5, Asp.Net, Java, V8 자바스크립트 엔진 등에서 발생한다.

취약점을 해결하거나 공격을 약화시키는 방법이다.

1. php 5.4.0 RC버전과 앞으로 나올 PHP 5.3.9 버전 (취약점 해결)

max_input_vars 설정으로 파라미터 개수를 제한한다.

2. 기존 php버전에서 (완벽한 해결이 아닌 공격을 약화시키는 방법)

php.ini 설정값 (default)
max_input_time = 60     ; Maximum amount of time each script may spend parsing request data
post_max_size = 8M

max_input_time은 요청 데이터를 파싱하는데 걸리는 최대 시간이다.
max_input_time으로 파싱 시간 제한, post_max_size으로 POST 사이즈를 제한함으로써 파라미터수를 어느정도(?) 제한하는 효과를 갖는다. 완벽한 해결이 아닌 공격을 약화시키는 방법이다.

기존에 쌓아둔 웹로그를 분석해서
  1. 스크립트의 실행 시간이 얼마나 걸리는지 (max_input_time 설정위해. 웹로그 시간은 정확히는 전송시간 + max_input_time + max_execution_time과 관련)
  2. 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_value_length = 1000000
suhosin.post.max_vars = 500
suhosin.request.max_vars = 500

수호신 모듈을 사용하면 위 설정만으로도 문제가 해결된다. 최대 파라미터 개수를 500개로 제한한 경우이다. default는 1000이다. 다음과 같이 차단되었음을 확인할 수 있다.

suhosin[95705]: ALERT - configured POST variable limit exceeded - dropped variable '..생략..' (attacker 'xxx.xxx.xxx.xxx', file '/..생략../index.html')

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번에 해당하는 구간이다.

1) POST 요청 -> 2) POST 데이터 전송 -> 3) 전송후 파싱 -> 4) 실행

정상적인 요청이라면 파싱하는데 걸리는 시간은 짧다. 그래서 이 수치를 줄임으로써 어느정도의 효과가 있다.


Trackback Address :: http://truefeel.tistory.com/trackback/206 관련글 쓰기
osun | 2012/01/06 09:21 | PERMALINK | EDIT/DEL | REPLY
감사합니다,,^^
BlogIcon 좋은진호 | 2012/01/06 12:21 | PERMALINK | EDIT/DEL
예. 대처 잘 하세요. ^^
Name
Password
Homepage
Secret
2012/01/02 19:20
먼저 공격 동영상 한편을 보자.

Denial of Service using Hash tables collisions in PHP


hash table collisions버그를 이용해서 PHP로 DoS공격을 하는 예이다. 동영상에서는 약 190초 동안이나 CPU load가 15%정도 올라갔다. H/W사양이나 요청하는 POST값은 다양하니 수치의 의미보다는 load 상승의 심각성을 중요포인트로 생각해야 한다. 이런 비정상 요청 몇개만으로 서비스는 제대로 이뤄지지 않을 수 있다. '단 몇개만'으로.

웹서버에서는 Request POST, GET 변수를 hash 구조로 관리한다. 그런데 POST 요청 파라미터수가 상당히 많을 경우(GET 요청은 길이 제한이 있으므로 문제가 되지 않음)에 hash 충돌이 많이 발생하게 되어 CPU load가 상당히 올라가게 된다. 이런 문제는 PHP5, Asp.Net, Java, V8 자바스크립트 엔진 등에서 발생한다.

PHP의 경우 5.4.0 RC버전과 앞으로 나올 PHP 5.3.9 버전에서 max_input_vars 설정으로 파라미터 개수를 제한할 수 있다.

현재 @hashDoS 트위터( http://twitter.com/hashDoS )에서 이번 취약점에 대한 논의가 있으니 참고하기 바란다.

* php에서 hash table DoS(HashDoS) 공격 방어 (정리해서 올렸습니다. 1.4(수) 오전)
* hashDoS 취약점 관련 글


Trackback Address :: http://truefeel.tistory.com/trackback/205 관련글 쓰기
BlogIcon 이정일 | 2012/01/02 20:08 | PERMALINK | EDIT/DEL | REPLY
나중에 기회 되시면 이번 선관위 DDos 공격도 좀 다뤄주세요!
새해 복 많이 받으세요.
BlogIcon 좋은진호 | 2012/01/02 23:16 | PERMALINK | EDIT/DEL
선관위 DDoS는 누구나 다루곳 싶을거에요. 그런데, 정확한 자료 없이 다뤘다가는 ㅠ.ㅠ
웹로그를 볼 수만 있다면, 공개만 된다면 다루고 싶어요. ^^
BlogIcon __yuki_n | 2012/01/02 21:59 | PERMALINK | EDIT/DEL | REPLY
잘 봤습니다. 참고 하겠습니다.
BlogIcon 좋은진호 | 2012/01/02 23:17 | PERMALINK | EDIT/DEL
저 취약점 때문에 곳곳에서 고생중일 것 같아요. ^^
여우이 | 2012/01/07 16:44 | PERMALINK | EDIT/DEL | REPLY
java 쓰고 있는데 패킷이 200메가급이 밖으로 빠져나가질 못해서 인터넷 다운걸립니다.

해결책없나요
Name
Password
Homepage
Secret
2011/12/08 20:06
올초에 다큐멘터리 '울지마 톤즈'를 봤다. 아프리카 수단의 작은 마을 '톤즈'에서 故 이태석 신부님의 감동적인 사랑을 다큐멘터리로 만든 것이다. 톤즈 사람들에게 이태석 신부님은 아버지이자, 선생님, 의사, 지휘자였다.

다큐멘터리 울지마 톤즈

[ 다큐멘터리 울지마 톤즈 ]


학교에서 아이들을 가르치고, 아픈 사람을 치료해주고, 아이들에게 트럼펫, 클라리넷 등 악기를 사주고 그 악기를 가르쳐준다. 톤즈 사람들과 늘 함께 했던 이태석 신부님은 2010년 1월 선종하셨다.
아이들은 그분을 보고싶어도 기다려도 더이상 만날 수가 없었다. 시간이 지난 후 한국에서 있었던 장례식 장면을 톤즈 아이들에게 화면으로 보여준다. 아이들은 눈물을 흘리고...  그 순간 나도 눈물을 흘리지 않을 수 없었다.

안보신 분은 유튜브( 다큐멘터리 울지마 톤즈 , 1시간 20분)에 올라와 있으니 꼭 보시길. 손수건을 꼭 손에 쥐고 봐야한다.

다큐멘터리를 본 후 신부님이 쓰신 '친구가 되어 주실래요?' 책을 읽었다.



다큐멘터리처럼 그가 아프리카 남수단의 '톤즈'에서 생활한 이야기를 책으로 엮었다.
없는게 없는 우리들과는 반대로, 수단 사람들은 있는게 없다. 하지만 그와 톤즈 사람들은 우리가 없는 아름다운 마음을 가졌다. 가진게 많은 우리, 가진게 없지만 아름다운 마음을 가진 그들.
이 책 또한 눈물나게 한다. 눈물이 맺히지 않으면 당신이 매마른 것이야~

이 책에서 기억에 남는 문장 몇개
  • 총과 칼을 녹여 그것으로 클라리넷과 트럼펫을 만들면 좋겠다. 총소리 대신에 아름다운 음악 소리가 울려퍼지면 얼마나 좋을까 (한 학생)
  • 주의하라! 골통은 '너'도 될 수 있지만, '나'도 될 수 있다.
  • 콜레라의 원인이 단순히 더러운 물 때문일까? 오염된 물인줄 알면서도 그 물을 마실 수 밖에 없었던 이곳의 열악한 환경. 그렇다면 우리에게도 책임이 있지 않지 않은가? 오존층을 파괴, 지구 온난화
  • 부족한 것들 때문에 이곳에서의 생활이 불편한 점도 있긴 하지만 부족한 것들 덕분에 얻는 평범한 깨달음도 많다. 작은 것들에 대한 감사하는 마음을 얻게 돼. ... 많이 가지지 않으므로 인해 오는 불폄한은 참고 견딜만한 충분한 가치가...
  • 많은 경우 큰 문제를 일으키는 실제 원인은 아주 작고 간단한 것에 있다. 많은 문제를 일으키는 가장 흔한 원인은 바로 '나 자신'
  • 많은 사람들이 많은 재물의 주인이 되기만을 원할 뿐이지. '자기 행동의 주인' 이기를 꺼려 한다.
  • 향의 종류와 세기의 정도에 차이가 있지만 사람은 누구나 나름대로의 향기를 지니고 있다.

댓글 1개당 200원 기부 약속을 시작으로 올해까지 3년째 기부 중이다. 사랑의 연탄, 월드비전에 이어서 올해는 '수단어린이장학회'에 추가로 기부를 했다. 올초 책을 읽을 때 바로 기부하려고 했지만, 많이 늦었다.
수단어린이장학회는 아프리카 남수단 아이들에게 교육을 지원하는 사회단체이다. 수단 어린이들에게 희망을 주자. 배울 기회를 주자. 총칼 대신 음악을 배우도록 도와주자.

[ 올해 기부한 곳 ]

- 수단어린이 장학회 ( cafe.daum.net/WithLeeTaeSuk ) 00만원
- 사랑의 연탄나눔운동 ( www.lovecoal.org ) 00만원
- 월드비전 ( www.worldvision.or.kr ) 00만원 (해외식량위기지원 분야)

* 관련글
2010/12/30 - [일상] - 사랑의 연탄나눔운동과 월드비전에 기부했습니다.
2009/12/23 - [일상] - 사랑의 연탄나눔운동에 기부했습니다.
2009/03/03 - [일상] - 댓글 1개에 200원 기부하겠습니다.


※ 초기에 기부를 어디에 해야할지 고민했던 적이 있다.
    기부글을 쓰는 것은 1) 기분좋게 기부할 수 있는 곳이 있다는 것을 알리고, 2) 기부분위기를 만들어보고자...

Trackback Address :: http://truefeel.tistory.com/trackback/204 관련글 쓰기
Name
Password
Homepage
Secret
2011/11/25 12:53
저녁에 왕찐빵을 하나 샀는데, 크기도 크고 묵직한 느낌이 들었다. 엄청 커서 다 못 먹겠어~
'정말 무겁다~ 무겁다'라는 생각이 맴돌고. 무게가 얼마나 나갈까. 문득 무게를 재보고 싶어졌다.
그냥 재보고 싶다는 마음만 있었다.

[ 왕찐빵. 정말 크다 ]

밤 12시가 막 넘은 시각이었다.

그런데, 갑자기 헬스장의 저울이 떠올랐다. 먹다 남은 그 찐빵을 들고 달려갔다. 문이 잠겼네. 이대로 찐빵 무게를 못재는 건가. 돌아와 의자에 앉아 있는 순간. 아~ 마트가 있지.

추리닝 차림, 양말도 신지 않고, 슬리퍼만 신고 바로 건너편의 홈플러스로 뛰어갔다.
과일코너를 향했다. 그런데 매장 직원들이 많다. 그것도 저울 앞에.
먹다 남은 찐빵을 저울에 올리면 나를 이상하게 볼텐데. 이를 피해 조용한 채소코너의 저울에 올렸다.

[ 먹다 남은 왕찐빵 146g ]

146g. 2/5를 먹었다고 가정하면 대략 360g.
밤 12시 반에 결국 대략적인 무게를 알아낸 것이다. ^^

[ 11개 귤이 940g ]

저녁에 귤을 샀는데, 940g이라고 표시되어 있다. 내가 골라담은 귤은 11개였다. 개당 85g.
찐빵과 귤의 무게를 비교하자면, 이 왕찐빵은 보통 크기 귤 4개~4.5개 정도의 무게다.
슈퍼에서 파는 호빵도 찌기전에는 90g.

왕찐빵 1개 = 귤 4~4.5개 = 호빵 4개

왕찐빵 덕분에(?) 한밤에 미친짓을 했다. 재밌는 미친 짓. 아무튼 찐빵은 다 먹었다.

Trackback Address :: http://truefeel.tistory.com/trackback/203 관련글 쓰기
BlogIcon 이정일 | 2011/11/28 09:39 | PERMALINK | EDIT/DEL | REPLY
하하하~
BlogIcon 좋은진호 | 2011/11/29 09:07 | PERMALINK | EDIT/DEL
엉뚱한 짓은 가끔 재미를. ㅎㅎ
BlogIcon erinjslee | 2011/12/01 02:46 | PERMALINK | EDIT/DEL | REPLY
앗..이ㅡ새벽에 사진보고나니 갑자기 배가 고파집니다
BlogIcon 좋은진호 | 2011/12/01 19:21 | PERMALINK | EDIT/DEL
이글을 보는 즉시 달려가서 사 드셔야합니다. 안가시면 반칙이에요. ㅋㅋ

농담이고.
저거 정말 양 많아요. 한끼 식사가 될 정도.


BlogIcon 삐꾸강아쥐 | 2011/12/21 16:49 | PERMALINK | EDIT/DEL | REPLY
아~! 저도 갑자기 찐방이 먹고 싶어지네요...^^

전 붕어빵도 상당히 좋아 하는뎅...ㅠㅠ

이번에 붕어빵... 파문이 일어서...
BlogIcon 좋은진호 | 2011/12/23 00:29 | PERMALINK | EDIT/DEL
이 찐빵 드시려면 저녁 대신 드셔야해요. ㅎㅎ
붕어빵 파문은 처음 듣네요. ^^
댓글기부 | 2012/01/20 15:07 | PERMALINK | EDIT/DEL | REPLY
ㅋㅋㅋ 집에가는 길에 시장에 왕찐빵과 왕만두 파는데...
갑자기 먹고 싶어 지네요..ㅋㅋ
BlogIcon 좋은진호 | 2012/01/25 18:15 | PERMALINK | EDIT/DEL
왕찐빵 사먹은 뒤에 왕만두도 사먹었는데, 이것도 만만치 않게 크더군요. ^^
Name
Password
Homepage
Secret
prev"" #1 #2 #3 #4 #5 ... #42 next