IT이야기2012. 3. 14. 08:30
Akamai(아카마이)의 서버는 현재 105,000대의 서버로 운영중이라고 한다. 78개국의 ISP와 1900여개의 망에서 서비스 중이다. (Data Center Knowledge의 'Akamai Now Running 105,000 Servers' )

Akamia의 NOC(Network Operating Center)

[ Akamia의 NOC(Network Operating Center) (출처 : Pingdom ]

Akamai도 2~3년 사이(2009년에 48,000대)에 2배 이상 증가했다. 저쪽 동네는 쓴다하면 10만대 이상, 좀 덜 써도 몇만대하는 곳은 여러 군데인 것 같다. Akamai 외의 서버 대수는 Data Center Knowledge에서 꾸준히 업데이트를 하고 있다. (멋져~~) ( 'Who Has the Most Web Servers?' )

  • Akamai Technologies: 105,000대 (company, 2012.3월)
  • OVH: 100,000대 (company, 2011.7월)
  • SoftLayer: 100,000대 (company, 2011.12월)
  • Rackspace: 79,005대. 클라우드 서비스로 급증 (company, 2011.12.30)
  • Intel: 75,000대 (company, 2011.8월)
  • 1&1 Internet: 70,000대 이상 (company, 2010.2월)
  • Facebook: 60,000대 (추정치, 2009.10월)
  • LeaseWeb: 36,000대 (company, 2011.2월)
  • Intergenia: (PlusServer/Server4You), 30,000대 (company, 2011년)
  • SBC Communications: 29,193대 (Netcraft)
  • Verizon: 25,788대 (Netcraft)
  • Time Warner Cable: 24,817대 (Netcraft)
  • HostEurope: 24,000대 (Company)
  • AT&T: 20,268대 (Netcraft)

구글은 공식적인 서버대수를 발표하지 않기 때문에 몇대인지는 명확하지는 않지만, 2011년에 대략 90만대로 추정된다.

NHN은 2013년 상반기 오픈을 목표로 춘천 데이터센터를 짓고 있다. 1만5천평 규모에 1500억원을 투자한다.
서버는 구글이나 페이스북처러 조립서버로 구성한다는 얘기가 들린다. 그리고 서버는 PSU을 없애고 AC전원이 아닌 DC전원을 공급받을 것이라고 한다. AC전>원이라면 AC -> DC로 전환할 때 전력 손실이 발생한다. 그런데 DC전원을 공급받으므로 전력 손실이 줄어들어 효율이 높아질 것이다.

NHN 도시첨단산업단지 조감도. 춘천 데이터센터

[ NHN 도시첨단산업단지 조감도. 도로 아래쪽이 데이터센터로 추정 ]


현재의 네이버 서버와 춘천 데이터센터가 오픈할 시점의 서버는 몇대일지 궁금해진다.


* 관련글
2011/04/20 - Facebook의 데이터센터와 서버
2010/06/30 - 페이스북(Facebook)의 서버 대수는 6만대 이상?
2009/06/01 - 해외 주요 업체의 서버 대수는?
2009/04/10 - 구글, 구글 서버와 데이터센터 발표자료를 풀 동영상으로 공개

Posted by 좋은진호
시스템이야기2012. 1. 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)


※ 2012.2.2에 php 5.3.10버전이 나왔습니다. HashDoS를 패치한 5.3.9버전에 원격에서 코드를 실행할 수 있는 취약점이 있습니다. 자세한 것은 'php 5.3.10으로 업그레이드하세요."를 읽어보세요.

* HashDoS 관련 글

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


Posted by 좋은진호
시스템이야기2012. 1. 4. 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) 실행

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


Posted by 좋은진호
시스템이야기2012. 1. 2. 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 취약점 관련 글


Posted by 좋은진호
일상2011. 12. 8. 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) 기부분위기를 만들어보고자...

Posted by 좋은진호