5 minute read

  • 요약
  • POST등으로 값이 넘어온 KEY와 VALUE로 hashtable을 만들게 되는데, 이 때 KEY에 특정 문자열이 들어가면 hashtable을 만들고 검색하는데의 엄청난 시간(CPU사용)이 걸리게 된다.
  • 문제있는 문자열
  • Ez
  • FY
  • G8
  • H%17

  • 일반적으로는 발생할 수 없다. 왜냐면 넘어온 값의 수가 1000개가 넘고(즉, 엄청나게 많은 수), 문제있는 문자열이 포함되어있어야하기 때문이다.
  • 하지만, 이걸로 공격할려고 한다면… 공격되겠지.
  • 해결법은 대부분 넘어오는 POST의 갯수를 제한.

  • 관련 문서 : http://www.nruns.com/_downloads/advisory28122011.pdf
  • 테스트 URL : http://koto.github.com/blog-kotowicz-net-examples/hashcollision/kill.html

  • 해결방안 (http://truefeel.tistory.com/206 참고)

  • PHP 업데이트 : 5.4.0RC, 5.3.9 이상 버전
  • 현재 회사 서버의 PHP 버전은 : .5.2.13 (13 부분은 다를 수 있습니다.)

  • 수호신 보안 모듈 사용 (현재 상태에서 추천)
  • POST 변수 수를 제한할 수 있음.
  • 가장 간단할 것으로 예상

  • Apache(웹서버)에서 POST 사이즈 제한
  • 이 경우 파일 업로드 등에서 문제가 생김.

  • Php.ini 설정 변경
  • max_input_time
  • post_max_size
  • 완벽한 방어가 안됨

  • 이 경우 파일 업로드 등에서 문제가 생김.

#테스트

글자 수(ANSI): 1,441,792 (1.3MB)

sar 데이터 파랗게 된 부분에서 CPU하나가 100%를 사용함.

(CPU 8코어, 1코어의 100%는 전체의 12.5%)

10:55:35          all      0.25      0.00      0.51      0.25      0.00     98.99 10:55:36          all      0.00      0.00      0.13      0.00      0.00     99.87 10:55:37          all      0.13      0.00      0.00      0.38      0.00     99.49 10:55:38          all      3.68      0.00      0.76      0.25      0.00     95.30

10:55:39          all     13.07      0.00      0.38      0.00      0.00     86.55 10:55:40          all     12.94      0.00      0.38      0.00      0.00     86.68 10:55:41          all     12.94      0.00      0.38      0.00      0.00     86.68 10:55:42          all     12.94      0.00      0.25      0.00      0.00     86.80 10:55:43          all     13.07      0.00      0.38      0.51      0.00     86.04 10:55:44          all     12.82      0.00      0.13      0.00      0.00     87.06 10:55:45          all     12.80      0.00      0.38      0.00      0.00     86.82 10:55:46          all     12.82      0.00      0.25      0.25      0.00     86.68 10:55:47          all     12.93      0.00      0.38      0.00      0.00     86.69 10:55:48          all     12.96      0.00      0.38      0.38      0.00     86.28 10:55:49          all     12.67      0.00      0.00      0.25      0.00     87.07 10:55:50          all     12.69      0.00      0.13      0.00      0.00     87.18 10:55:51          all     12.91      0.00      0.25      0.00      0.00     86.84 10:55:52          all     12.71      0.00      0.00      0.25      0.00     87.04 10:55:53          all     12.91      0.00      0.25      0.13      0.00     86.71 10:55:54          all     12.96      0.00      0.13      0.13      0.00     86.79 10:55:55          all     12.82      0.00      0.13      0.00      0.00     87.06 10:55:56          all     12.66      0.00      0.13      0.13      0.00     87.09 10:55:57          all     12.72      0.00      0.00      0.00      0.00     87.28 10:55:58          all     12.78      0.00      0.13      0.00      0.00     87.09 10:55:59          all     12.66      0.00      0.00      0.13      0.00     87.22 10:56:00          all     12.74      0.00      0.13      0.00      0.00     87.14 10:56:01          all     16.29      0.00      2.78      0.63      0.00     80.30 10:56:02          all     12.64      0.00      0.00      0.00      0.00     87.36 10:56:03          all     12.63      0.00      0.13      0.00      0.00     87.25 10:56:04          all     12.75      0.00      0.00      0.00      0.00     87.25 10:56:05          all     12.64      0.00      0.13      0.00      0.00     87.23 10:56:06          all     12.75      0.00      0.13      0.00      0.00     87.12 10:56:07          all     12.64      0.00      0.00      0.00      0.00     87.36 10:56:08          all     12.74      0.00      0.25      0.13      0.00     86.89 10:56:09          all     12.64      0.00      0.00      0.00      0.00     87.36 10:56:10          all     12.75      0.00      0.00      0.00      0.00     87.25 10:56:11          all     12.75      0.00      0.13      0.00      0.00     87.12 10:56:12          all     12.75      0.00      0.00      0.00      0.00     87.25 10:56:13          all     12.74      0.00      0.38      0.25      0.00     86.63

10:56:14          all      0.63      0.00      0.51      0.00      0.00     98.86 10:56:15          all      0.00      0.00      0.00      0.00      0.00    100.00

#결론 한 번의 공격으로(POST DATA 1.3MB) 34 초간 하나의 CPU를 100% 사용함. 해당 공격으로는 현 시스템에서는 문제가 발생됩니다.


🔗original-link

Updated: