IT이야기2009. 1. 3. 12:48


Where Google gets all that Gmail hard drive space

출처 : 'Joy of Tech' comic (2005.4.4)

Gmail만 그러겠는가. 서버, 검색데이터 등 모두 저렇게 땅속을 떡 하니 잡고 있을 것이다. 그래서 개발할 때 '삽질'한다는 말을 쓰는 것 같다. ^^

2005~2006년 콜롬비아강 근처 댈러스에 축구장 2배 크기의 IDC 건립에 대한 얘기가 떠오른다. 그 당시에 전세계 서버팜에 있는 서버가 45만대 정도될거라는 얘기가 있었다. 지금은 몇 대나 될까...

Posted by 좋은진호
일상2008. 12. 27. 01:52
정보는 이제 누구나 얻을 수 있는 공유자산이다. 아마 나누는 일을 가장 멋지게 실천하고 있는 곳이 웹생태계일 것이다. 그 덕분에 공유자산은 엄청나고, 뭘 집어 먹어야할지 모를 정도로 젓가락질(=클릭질)은 바빠진다. 결국 이런 문제가 생긴다.

1. 집중하지 못한다.

  디지털시대에 현대인들은 15분 이상 한가지 일에 집중하기 힘들다는 '쿼터리즘'이라는 말이 있다.
  정보가 넘쳐나니, 조급증이 심해질만 한다.

2. 폭식하게 된다.

  소화도 못하면서 마구잡이로 클릭하다보니 무엇을 먹었는지도 기억도 안나고,
  '잡다한 간식거리로 폭식'을 했으니 제대로 된 한끼 식사가 필요한 시점에 먹을 수 없게 된다.

3. 빠져나가지 못한다.

  기준없는 발걸음은 '들어가는 문은 있어도 나가는 문은 없게 만든다.'
  한번 클릭의 시작으로 계속 점점 빠져들고만다.
  브라우저탭은 점점 하나씩 늘어만 가고, 오늘 하루 열어본 페이지만 길게 늘어설 뿐이다.

[ 경기도청 앞 '생각하는 돼지'. 구글 이미지 검색 ]


정보를 접하는 생활습관부터 바꾸자.
  • 정보를 접하는 포인트를 줄이고, 관심분야의 정보로 집중한다.
  • 많이 먹으려 하지 말고, 제대로된 한끼 식사를 한다. 즉, 제대로 된 글 하나 읽는게 더 중요.
  • 나만의 물류창고를 만든다.   (예) 한RSS, 다음 DNA 렌즈
  • 무엇을 읽었는지 메모한다.   (예) 마가린스프링노트, 메모장 활용
  • 글쓴이의 마인드를 읽는다.
  • 흥미거리에 한눈 팔지 않는다. 아니, 한눈 팔더라도 금방 제자리로 돌아온다면 처음 습관치고는 나쁘지 않다.
  • 아무때나 밥먹으면 쓰나. 밥도 먹을 때가 정해져 있 듯 정보에 접근하는 시점도 일정한 때로 정한다.

넘쳐나는 정보를 쫒아다니면 뭐하겠는까? 진정 중요한 것은 지혜인데...

※ 2주전에 직원들과 함께 나누기위해 썼던 글을 재가공한 것이다.

Posted by 좋은진호
시스템이야기2008. 12. 21. 01:00
스팸 툴에서 사용하는 변수(매크로)가 그대로 노출되서 발송되는 경우가 있다. 2006년 하반기에 '스팸발송기가 깜빡한건가? (스팸메일의 변수들)'라는 제목으로 글을 쓴 적이 있다. 이번달에 또다시 이런 변수들이 섞여진 메일이 눈에 띄어(그 전에도 필터링되었을 것인데, 유독 이번달에 더 띈다.), 해당 변수들을 추가 정리하였다.

3. From: 예 (2008.12)

Return-Path: <JADA{%DIGIT%}{%DIGIT%}@hanmail.net>
... 생략 ...
From: JADA SESSOMS <JADA{%DIGIT%}{%DIGIT%}@hanmail.net>

4. From: 예 (2개, 2008.12)

From {%LFNAME%}{%LLNAME%}34@gmail.com  Fri Dec 19 05:23:02 2008
Return-Path: <{%LFNAME%}{%LLNAME%}34@gmail.com>
... 생략 ...
From: {$FROMNAME$} <{%LFNAME%}{%LLNAME%}34@gmail.com>

From: 이나 Return-Path: 헤더에서 %DIGIT% 에는 발송기가 임의의 숫자를 넣게 된다. %RND_DIGIT[1-3] 와 같은 형식도 있는데, 정규 표현식과 유사(정규표현식에서 {1,3}은 1~3자리를 의미)하게 사용해서 1자리에서 3자리까지 임의의 숫자가 들어가게 될 것이다. 결국 0~9자리의 숫자를 자유롭게 From주소에 넣을 수 있다는 얘기다.

- %RND_FROM_DOMAIN, %CUSTOM_FROM_EMAIL : 임의의 도메인 주소에 해당한다.
- %RND_IP : 임의의 IP주소
- {%MAILSERVERHOSTNAME%} : 서버명만 대체된다. 예) www.foobar.com 에서 www에 해당.
- {%LFNAME%}은 소문자 First Name, {%LLNAME%}은 소문자 Last Name을 추측되며, {$FROMNAME$}는 이름이다.

Subject: 헤더중 %RND_DATE_TIME에는 정상 스팸(?)일 경우 '파일럿 항공자켓 겨울특전~Wed, 21 Dec 2005 07:54:32 -0400' 처럼 날짜가 들어가 있다.

- %RANDOM_WORD : 임의의 단어
- %RNDUCCHAR16 : 임의의 대문자 16자리(숫자는 자리수로 추측된다.), '%RNDLCCHAR+숫자'형태라면 임의의 소문자를 뜻한다.
- %RANDOM_CHAR, %RANDOMCHAR, %RND_LC_CHAR, %RND_UC_CHAR 등의 유형도 있다. (개인적으로 수신한 적 없음)

스팸툴이 위와 같이 다양한 스팸용 변수들을 제공한다는 것은 스패머들에게 조리법(=스팸툴 매뉴얼)만 읽으면, 한두가지의 재료로 다양한 요리를 쉽게 만들어낼 수 있는 요리기구를 제공한 셈이다.
경우에 따라선 정상적인 조리에서는 먹어볼 수 없는 독특한 형태의 요리(=비정상적 헤더)도 만들어낸다. 예를 들어보자. 하나의 스팸메일에서 From:, Return-Path:, Message-ID:, Received: 의 메일주소나 도메인이 각각 다르게도 표시되는 경우가 많다. 이 것은 %RND_FROM_DOMAIN, %CUSTOM_FROM_EMAIL, %CUSTOM_FROM_NAME, %RND_IP 유형의 변수를 함께 사용하여 임의로 생성된 도메인(또는 메일주소)이 동시에 만들어지기 때문이다.

과연 저런 유형의 변수를 사용하는 스팸툴은 어떤 것이 있을까.

인터넷 여러 기술문서에서 확인할 수 있으며, 'Inside the Spam Cartel: Trade Secrets from the Dark Side'(2004년)책에서도 확인할 수 있다. 스팸툴의 이름을 공개하지 않고, 2개 스팸툴 화면만 소개한다.

쉽게 헤더를 변경


다양한 매크로(즉, 글에서 소개한 스팸용 변수)를 제공. 출처 : 책 'Inside the Spam Cartel'



메일과 안티스팸을 주제로 치뤄지는 CEAS 2008 행사(Conference on Email and Anti-Spam)가 있다. 여기서 발표된 'A Survey of Modern Spam Tools'(글 Henry Stern) 문서는 스팸메일의 유형과 변수(매크로)에 대해서 상세히 분석되어 있다.


자세한 글은 커피닉스에 써둔 '스팸발송기가 깜빡한건가? (스팸메일의 변수들)'을 살펴보기 바란다.

Posted by 좋은진호
IT이야기2008. 12. 14. 02:21
정식 발표 이후 이틀정도 주 브라우저로 사용했다. 베타 버전 사용할 때 자꾸 브라우저가 멈춰서, 10월 이후에는 거의 사용하지 않았다. 그래서 이 글에서 얘기한 것이 그 이전에 이미 개선된 것일 수도 있다.

  • 안정적이다. 브라우저가 죽는 경우가 없었고, 먹통이 되지도 않았다.
  • '알라딘'에서 책 미리보기시 '이전'과 '다음'버튼 눌러도 동작한다. 이전 사용할 때 안되어서 FF 사용했었다.
  • 시크릿 모드(Ctrl+Shift+N) 창에서 Ctrl+N을 누르면 일반 창으로 빠져 나올 수 있다. 전에는 Ctrl+N를 눌러도 계속 시크릿 모드 창만 떴다.

  • URL을 UTF-8로 보내서, 한글 파일 링크 클릭시 다운로드 안되는 것은 여전하다.
         (현실은 아직 EUC-KR한글 파일명이 많다.)
         (※ 파이어폭스는 about:config한 후 network.standard-url.encode-utf8 를 false 로 설정할 수 있다. 파이어폭스처럼 설정가능하면 얼마나 좋을까...)

Posted by 좋은진호
시스템이야기2008. 12. 11. 00:34
GreenSQL( http://www.greensql.net/ )은 MySQL에 대한 SQL 인젝션(Injection) 공격을 방어하는 프락시 개념의 어플리케이션이다. 웹페이지를 호출하면 DB쿼리는 먼저 GreenSQL 로 넘어겨지고, 검사한 후 정상적이면 MySQL 서버로 요청하는 과정을 거친다.
GreenSQL을 설치하고 실행과정은 이렇다. MySQL 서버는 기존 그대로 실행(디폴트 3306 포트)하고, GreenSQL을 3305포트로 실행(127.0.0.1:3305)한다. 이 때 GreenSQL은 MySQL 서버로 커넥션이 이뤄진다. 웹페이지는 DB커넥션을 GreenSQL의 3305포트로 커넥션하도록 변경해주면 된다. (MySQL을 3305로, GreenSQL을 3306으로 실행할 수도 있을 것이다.)

[ 이미지 출처 : GreenSQL 홈페이지 ]

DB 쿼리의 정상, 비정상은 어떻게 판단하는가?

1) '관리자가 실행할 SQL 유형'이나 '민간한 형태의 SQL 유형'(flush privileges, show 명령, 불법적 형태 등)을 패턴 매칭 방식으로 찾아서 불법 요청으로 간주한다. 예를들면 DB관리 명령어, DB 스키마를 변경시도하는 경우, 시스템 파일을 액세스하려는 경우 등을 불법으로 간주한다. 이 패턴에 대해서는 설정 파일을 통해서 변경이 가능하다.

2) 그후 각 쿼리 유형에는 점수가 할당되어 있는데, 이 점수를 합산한다. 지정된 값 이상이 될 경우, 경고 메시지를 뿌려주거나 차단할 수 있다. 유형은 다음과 같다.

* Access to sensitive tables increases risk query (users, accounts, credit information)
* Comments inside SQL commands increases query risk
* Usage of an empty password string
* Found ‘or’ token inside query
* Found SQL expression that always return true (SQL tautology)
* Comparison of constant values (SQL tautology)
* ... 등 ...

점수는 설정 파일을 통해서 변경이 가능하다. 다음은 샘플 설정 파일의 일부이다.
# If query risk is bigger then specified value, query will be blocked
block_level = 30
# Level of risk used to generate warnings. It is recomended to run application
# in low warning level and then to acknowledge all valid queries and
# then to lower the block_level
warn_level=20
# Risk factor associated with SQL comments
risk_sql_comments=30

차단된 샘플 로그이다. (sCag님 제공. 감사합니다.)

2008-12-09 16:54:18 mysql SELECT * FROM user WHERE name = 'x' or 1=1; --' AND pwd=SHA('')  blocked

GreenSQL에 대한 결론이다.

  • 멋진 생각이다. ^^
  • 패턴 설정과 차단수준을 유동적으로 변경 가능하다.
  • 대부분의 리눅스 배포판을 지원하며, FreeBSD도 지원한다.
  • 성능 테스트 결과 약간의 성능 저하가 발생한다. (2~12%정도)
  • 대용량 서비스에서 사용하기는 무리가 있을 것 같다.
  • 소규모 사이트나 웹호스팅에서는 고려해볼만 하다.
  • SQL Relay(DB 풀링과 로드발런싱 등)에서 제공하는 기능 등이 하나로 합쳐진다면 멋질 것 같다.
※ 개인적으로 GreenSQL을 운영하지 않습니다. 소규모 사이트, 웹호스팅에서 유용할 것 같아 소개해드리는 것이며, 운영상 궁금한 점을 저에게 질문하셔도 답해드릴 수 없습니다. ^^
※ 글쓰고 나니깐 sCag님도 GreenSQL 글을 쓰셨네. 안쓰실 것 처럼 말씀하시더니. ㅋㅋ

Posted by 좋은진호