세이박스

[긴급입수 동영상] 현지주민이 찍은 검은 연기에 뒤덮힌 연평도

기타


연평도 현지에서 주민이 휴대폰으로 촬영한 동영상을 SBS에서 긴급 보도중...

출처 : http://news.sbs.co.kr/section_news/news_read.jsp?news_id=N1000824221

php DB 인젝션 공격 방어

웹프로그램
인젝션 방어를 위한 처리를 하기 위해선
get, post 로 넘어오는 모든 변수중에서 DB에 사용될 변수에 대해 검수를 거친뒤에 DB에서 사용하도록 해야하나 이미 구축된 사이트에 일일이 적용하기엔 힘들 경우 아예 get, post 데이터 전체를 검사하도록 다음과 같이 구현해 봤습니다.

//인젝션 공격 막기 넘어오는 변수들 모두 검사

//GET
while(list($fildn1,$fildv1) = each($_GET)) {
  if(eregi("--",$fildv1)) {
    echo "<script>alert('[요청거절] 요청하신 값중에 사용할 수 없는 코드가 들어 있습니다.');history.back();</script>";
    exit;
  }
}

//POST
while(list($fildn2,$fildv2) = each($_POST)) {
  if(eregi("--",$fildv2)) {
    echo "<script>alert('[요청거절] 요청하신 값중에 사용할 수 없는 코드가 들어 있습니다.');history.back();</script>";
    exit;
  }
}

일단 인젝션 공격에 대표적인 문구인 "--" 하나 넣어 봤는데 필요시 "--|;|\.js" 처럼 "|"로 구분해서 추가 하면 되겠죠!
물론, 정상적인 값들까지 차단 될 수 있다는 문제가 있긴 합니다.
따라서, 차단할 패턴은 잘 선택해서 입력하세요.
그리고, ".js" 앞에 "\" 표시 붙인 이유는 "." 점이 정규식 예약어라서 무시하도록 하기 위해 "\"원화 표시를 붙여 줍니다.
정규식 예약어는 세이박스에서 조회 해서 확인 하세요!

하지만, 효율성을 위해서 사이트 구축시 처음부터 인젝션 공격을 고려해서 코딩 하세요!
이게 정답이다 할만한건 없지만 자신의 사이트에 맞는 최적화 방법이 최고 입니다.

예로 들자면 $num 이라는 변수에는 단순 숫자만 넘어와야한다면
if(eregi("[^0-9]",$num)) echo "접속차단";

이런식으로 필요하지 않는 값을 원천적으로 차단 해주는게 가장 좋습니다.
이유인즉, 최근에는 Ascii 코드 값으로 문자를 만들어 공격 하기도 합니다.
이럴경우 제가 만든 소스로는 좀 힘들겠죠...

그럼, 여러분들이 만들어 두신 좋은 차단 방법 좀 있으면 올려주세요~
화이팅!!

[해킹] Cain & Abel 카인과아벨 스푸핑 프로그램 공격 유형 및 보안 방법

서버,보안

카인과 아벨이라 왠지 최근 인기 있는 드라마 제목 같다.
하지만 이름만 비슷할뿐 해킹 프로그램이다.
일종의 세션 하이재킹 과 IP스푸핑이 섞여 있는 형태라고 할 수 있습니다.

몇년 전 L전자 신입사원 시험에 떨어진 한 청년이
홧김에 L전자를 해킹을 했다 라는 보도가 있었는데
이또한 Cain & Abel 프로그램을 이용한 것 이었습니다.

적을 알아야 막든지 공격하던지 해야 할터
나를 공격한놈이 도대체 어떤 놈인지 여기 저기 자료를 찾아봤다
http://www.oxid.it/index.html
사이트에서 만든 프로그램인 듯했다 즉, 해당 설치 파일을 쉽게 구할 수 있는 것이었다.
다운받아 설치 해보니 역시나 네트워크상의 데이터를 수집하는 것이었다.

사용법은 http://www.oxid.it/ca_um/ 에 설명이 간략하게 되어 있습니다.
프로그램 이름이 카인과 아벨 즉, 좋은 용도와 나쁜 용도로 해당 프로그램을 이용할 수 있는데
메뉴얼을 보면 cain , abel 두개의 카테고리로 되어 있습니다.
abel 은 좋은 용도 순수하게 네트워크 패킷을 분석하는등에 대한 설명이며
cain 은 나쁜 용도로 사용하는 방법 스나이핑 등에 대해 그 용도를 설명 하고 있습니다.
성경에 나오는 착한 동생 아벨과 동생을 죽인 형 카인의 모습처럼 하나의 프로그램이 나쁜쪽과 좋은쪽의 용도로 사용할 수 있다는것을 보여 주는 것이죠.

간단하게 기능을 설명하자면 해당 프로그램을 실행하고서 기다려 보면 수백건의 스캔된 정보가 자신의 컴으로 들어와 있는것을 확인 할수 있습니다.
즉, 네트워크 상에 지나 다니는 모든 패킷을 캡쳐해서 보여주는 것으로 홈페이지 로그인 아이디 및 비번등을 모두 보여 줍니다.

보통 윈도우 서버를 취약점을 이용해 해당 서버에 카인과아벨 프로그램을 설치해
목적 서버를 수푸핑하는 형태입니다.

위와 같은 프로그램이 서버에 설치 되었다면 다음과 같이 처리 하세요!
일단 해당 프로그램을 일단 지우셔야 하겠죠.
보통 c:\windows\system32\server 폴더등 시스템 경로쪽에 설치가 되어 있습니다.
그외에 다른 프로그램들 설치 되어 있는지 꼭 확인하시구요
개정 정보에서 추가된 개정이나 불필요한 개정 모두 사용 정지하거나 삭제 해버리세요
그리고, 터미널 접속은 할 수없게 하세요.
만약 꼭 사용 해야 한다면 포트를 변경하세요.
포트 변경 방법은 유포유에 글이 있으니 참고 하세요!
윈도우 서버가 워낙 취약점이 많은지라 보안에 신경 많이 써 주셔야 할겁니다.
특히 사용하지 않는 포트는 모두 잠거 두시는게 좋습니다.

그리고, 로그인시 SSL 적용을 꼭 하시기 바랍니다.
SSL 관련해서 유포유에 자료 있으니 참고 하시구요.
SSL 적용시 로그인 정보를 암호화 해서 보내므로 그나마 회원들의 개정이나 기타 정보를 보호 해줄 수있습니다.

이외에도 보안할 사항을 저역시 찾아보구서 찾으면 추가적으로 글을남겨 놓겠습니다.

 

Apache Web Server 의 DOS공격 막기

서버,보안
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2003.8.20(수) apache v1.3.x
수정일 : 2003.8.25(월) apache v2.x 부분 추가

특정 URL이나 IP일 경우나 특정한 브라우저를 이용하여 DoS(Denial of Service, 서비스거부)
공격이 들어온다면 httpd.conf 에서 SetEnvIf, SetEnvIfNoCase 등과 Allow, Deny 설정으로
간단히 막을 수 있겠지만 일정한 유형이 없다면 해결점을 찾기가 쉽지 않다.

다행히 Apache용 mod_dosevasive 모듈로 DoS 공격을 쉽게 막을 수 있다.
며칠전 1.7버전 발표로 apache 2.x에서도 정상적으로 이 모듈을 이용할 수 있게 됐다.

1. mod_dosevasive 설치

http://www.nuclearelephant.com/projects/dosevasive/
에서 mod_dosevasive (현재 최신버전은 1.7)을 받아온다.

1) 기존에 사용하던 apache 1.3.x에 모듈만 추가할 때

mod_dosevasive.tar.gz 을 푼다음 apxs로 설치

----------------------------------------------
# tar xvfz mod_dosevasive.tar.gz 
# cd dosevasive
# /bin/apxs -iac mod_dosevasive.c
...
[activating module `dosevasive' in /usr/local/apache/conf/httpd.conf]
cp mod_dosevasive.so /usr/local/apache/libexec/mod_dosevasive.so
chmod 755 /usr/local/apache/libexec/mod_dosevasive.so
...
----------------------------------------------

httpd.conf의 LoadModule, AddModule는 apxs가 알아서 추가해준다.

2) apache 1.3.x부터 새로 컴파일할 할 때

mod_dosevasive.tar.gz 을 apache_source_홈/src/modules 에 푼 다음
기존에 apache 컴파일하는 것과 동일한 방법으로 하되, --add-module=... 옵션만
추가해준다.

----------------------------------------------
./configure --prefix=/usr/local/apache \
--enable-module=all --enable-shared=max \
--add-module=src/modules/dosevasive/mod_dosevasive.c  <-- 추가함
make
make install
----------------------------------------------

3) apache 2.x에 모듈만 붙일 때

/bin/apxs -iac mod_dosevasive20.c

2. 설정

httpd.conf 에 아래 설정이 있는지 확인한다.

apache 1.3.x
----------------------------------------------
...
LoadModule dosevasive_module libexec/mod_dosevasive.so
...
AddModule mod_dosevasive.c
----------------------------------------------

apache 2.x
----------------------------------------------
LoadModule dosevasive20_module modules/mod_dosevasive20.so
----------------------------------------------

httpd.conf에는 다음과 같이 설정을 추가한다.
( 단, 아래 설정 중에 apache 2.x일 때는 < IfModule mod_dosevasive20.c> 로 )
----------------------------------------------
< IfModule mod_dosevasive.c>
  DOSHashTableSize  3097
  DOSPageCount    3
  DOSSiteCount    50
  DOSPageInterval   1
  DOSSiteInterval   1
  DOSBlockingPeriod  30
< /IfModule>
----------------------------------------------
DOSHashTableSize  3097

hash table의 크기. IP, URI등을 분석하기 위한 공간으로 쓰이는 것 같은데 정확히는
모르겠다. 접속이 많은 서버이면 수치를 높인다.

DOSPageCount    3
DOSPageInterval   1

DOSPageInterval에서 지정한 시간(초단위)동안 같은 페이지를 3번 요청한 경우
해당 클라이언트 IP를 블럭킹한다. 블럭킹되는 동안에 사용자에게는 403(Forbidden)
코드가 전송된다.

DOSSiteCount    50
DOSSiteInterval   1

DOSSiteInterval에서 지정한 시간동안 어느 페이지나 이미지든 요청 건수가 50번을 넘는
경우 해당 클라이언트 IP를 블럭킹한다. 403코드 보내는 것은 마찬가지.
HTML 내에 이미지가 10개이면 요청 건수는 HTML포함하여 11번이 되므로 이미지가 많은
사이트는 숫자를 크게한다.

DOSBlockingPeriod  30

블럭킹된 IP는 30초동안 접속을 할 수 없다.

3. 모듈 사용을 중지하려면

차단 기능을 이용하지 않기 위해

DOSPageCount 0
DOSSiteCount 0

와 같이 하면 모듈 내부의 default값을 이용해서 동작하므로 LoadModule, AddModule를
주석 처리하는 방법을 써야한다. 또는 Count값을 상당히 큰 수를 지정할 수도 있겠다.

4. 차단하는지 테스트

간단한 테스트 툴로 test.pl을 제공한다.
12번째 줄에

printf("%03d ", $_ );

를 추가하고

apache를 실행시킨 다음 perl test.pl을 해보면 200 OK, 403 Forbidden 된 것을 쉽게
확인할 수 있을 것이다.

DOSPageCount, DOSSiteCount 수치를 너무 낮게 하면 정상적인 접속에 대해서도 차단될 수
있으므로 주의해야 한다. 수치를 낮추고, 같은 페이지를 reload(Ctrl+R)를 여러번했더니
바로 403 페이지가 등장.

403 페이지를 별도로 만드는 것이 좋을 듯 싶다. httpd.conf에 ErrorDocument 403 ... 설정
으로 html을 만들어두면 방문자에게 도움이 되지 않을까...

이젠 ab, lynx 등으로 게시물 조회수를 순간적으로 올린다거나, 시스템 로드를 증가시키는
것까지도 어느정도 막을 수 있을 것이다.

※ syslog 로 로그 남기는 기능과 DOSEmailNotify, DOSSystemCommand 옵션은 제대로 적용
  되지 않아 이 글에 적지 않았다. 정상동작이 확인되면 그 때 추가할 것이다


iframe 삽입 공격 보안

서버,보안

1. 사건 배경
평소 꾸준히 방문하던 쇼핑몰에 어느날 갑자기 뽀로록 소리가 나면서 상단 바에 노란줄이 생기며 경고가 뜬다 혹은 알약 등 백신에서 감시프로그램이 "치명적인 바이러스에 감염되었습니다."라고 뜬다. 너무나 당황한 A군 해당 쇼핑몰에 접속하기 겁이 난다 ㅜㅜ;

2. 사건 원인
해당 쇼핑몰은 iframe 삽입 공격을 받은것이다. DB인젝션 공격과는 좀 다른 유형으로써 윈도우 웹서버 개정관련 보안 취약점을 공격하는 방식이다.
원인은 홈페이지 폴더에 everyone 개정에 쓰기권환까지 줬기 때문에 생긴 문제이다.
폴더에 속성 > 보안 눌러보세요 분명 everyone 개정으로 설정되어 있을겁니다.
윈도우 2000서버 등 초기 IIS 서비스 당시 everyone으로 설정한 운영자가 더러 있었을 겁니다.
이유야 어찌 되었던 이제라도 발견 하셨다면 다행인거죠! ^^ 화이팅!

3. 보안 방법
홈페이지 폴더에 IUSR_서버명, IWAM_서버명 의 두 개정을 추가하고 everyone 개정은 삭제 합니다. 그리고, IUSR_, IWAM 권환에 읽기,실행 권환만 줍니다. 그리고, 게시판 첨부파일이 업로드될 폴더등 쓰기 권환이 꼭 필요한 곳에만 쓰기 권환을 줍니다.
저의 경우엔 웹서비스 디렉토리 바깥쪽에 폴더를 만들어 업로드 하도록 해놨습니다.


윈도우 서버 보안 취약점으로 인해 생기는 문제가 참 많군요 ^^;

MSSQL 작업스케줄러로 반복 적으로 쿼리 실행하기

데이타베이스
최근 스크립트 인젝션 공격으로 인해 DB에 <script *></script> 가 삽입 되어 애를 먹은적이 있었다.

다행히 스크립트를 찾아서 지워주는 쿼릴 실행해서 복구는 되었으나 지속적으로 들어와 서비스를 중단하고 소스를 수정해야하는 사항까지 갈것 같았다.
그래서 생각한게 보안처리 될 동안 복구해주는 쿼리가 주기적으로 돌아가 주면 좋겠다는 생각에 MSSQL 에이전트 작업을 이용해보았다.

백업등을 목적으로 주로 이용하지만 이렇게 원하는 쿼리를 주기적으로 동작하게끔도 할수 있다.

1. 먼저 "엔터프라이즈 관리자"를 실행한다.

사용자 삽입 이미지

2. 다음으로 콘솔루트 > Microsoft SQL Servers > (LOCAL) ... > 관리 > 작업 을 선택한다.

사용자 삽입 이미지

3. 마우스 우측 버튼을 눌러 작업 추가를 선택한다.
여기서 이름을 구분할 수 있게 적어두고 범주는 적당히 데이터베이스 유지 관리 등 선택한다.
그리고, 당연 쿼리를 실행할 소유자를 선택한다. 쿼리 적용할 소유자 필요하면 다른 작업자를 위해 설명을 달아두는것도 좋을듯..그리고 우측 대상 서버 선택 보통 [local]

사용자 삽입 이미지


4. 다음으로 단계 탭을 클릭한다. 여기서 새로 만들기 클릭

사용자 삽입 이미지


5. 단계이름 적당히 입력하고 유형은 Transact-SQL 스크립트 [TSQL] 를 선택 그리고 데이터베이스를 선택한다. 그리고 명령칸에 쿼리를 작성한다.

사용자 삽입 이미지


6. 이제 일정 탭을 선택후 새일정을 추가한다. 스크립트를 언제 마다 돌릴지 설정 해주는것이다.

사용자 삽입 이미지

7. 이름을 적당히 넣어주고 되풀이를 선택한다. 그리고 되풀이 옆에 변경을 클릭!

사용자 삽입 이미지


8. 되풀이 방법은 매일 혹은 매주 선택하고 매일 인 경우 몇일마다 1일마다면 매일이 되는것이겠죠. 하루빈도 한번수행할지 되풀이 수행할지 선택 되풀이 수행 체크하고 1분으로 설정하면 1분마다 계속 줄기차게 실행이 되겠죠 그리고 시작 끝은 그냥 놔두시면된 기본설정이 24시간이니깐.

사용자 삽입 이미지

9. 마지막으로 알림 탭에서 처리후 관리자에게 처리 상태를 메일을 발송할지 여부를 선택할 수 있다. 즉, 실패할 경우라고 선택하고 메일을 적어두면 메일을 보고서 쿼리가 동작 안하는구나 하고 판단을 할 수 있겠죠. 필요하시면 설정하시면됩니다.

사용자 삽입 이미지

10. 이것으로 설정이 끝났으며 목록에서 자신이 추가한 항목에 마우스 우측 버튼 눌러 시작을 클릭하시면 동작합니다. 만약 중지하고 싶으시면 중지 그리고 아예 비활성화 시킬수도 있습니다. 말그대로 "비활성화"를 선택해주시면 절대 동작 안합니다.

사용자 삽입 이미지

원래 백업 관리 계획용으로 주로 이용되나 저처럼 반복적인 쿼리 실행을 하고자 할 때 유용하게 사용하실 수 있을겁니다. 응용해서 잘 이용해보세요!

위 글은 제가 직접 작성한 글이니 가져가실땐 꼭 출처까지 표시 해주세요!
출처 : 세이박스 http://www.saybox.co.kr/460