2 분 소요

KISA 한국인터넷진흥원의 인터넷침해대응센터에서는 Castle이라는 웹방화벽을 배포하고 있어서 설치해봤다. SQL 인젝션, 욕설 필터링 등등 좋은 기능이 많다.

이 소프트웨어는 PHP/JSP/ASP 3가지 버전으로 나와있어 자기 플랫폼에 맞는 버전으로 사용하면 된다. 내 서버의 경우에는 JSP와 PHP를 사용중인데 사실 PHP쪽은 잘 쓰지 않기도하고 JSP쪽으로 프로그래밍을 더 많이 즐기기 떄문에 JSP 버전으로 설치해보았다.

다운로드는 http://www.krcert.or.kr 에서 다운로드가 가능하다. 상단메뉴 중에 ‘웹보안서비스’에 ‘CASTLE’ 메뉴를 클릭하면 된다.

중요한 점 : 내가 해본 결과 이 페이지는 윈도우7 + 크롬에서는 잘 열리고 다운로드도 제대로 작동되었지만 맥 OSX 10.7 + Safari에서는 제대로 작동되지 않았다. 왜 다운로드가 안되나 한참 삽질했다.

다운로드하면 PHP/JSP/ASP 세가지 버전의 파일과 사용설명서, 설치설명서 등이 친절하게 들어있다. 사실 설치는 포함된 설치설명서 PDF 파일을 보고 그대로 하면 된다.

파일업로드 -> 자바 class 파일 컴파일 -> 기존 파일에 코드 삽입의 세단계로 이루어지는데 자바,  JSP와 서블릿을 조금이라도 해봤던 사람이라면 하나도 어렵지 않다.

문제는 다른 곳에 있었는데… 설치안내 문서에는 class 파일을 컴파일 할때 javac *.java 를 실행하라고 나와있는데 이대로 했을 경우, EUC-KR 문자셋에 문제가 있다는 오류가 딱 100개 출력된다. 이 상태로 그냥 진행하면 작동은 되긴되나 나중에 방어 메시지가 한글이 모조리 깨지며 로그 파일의 한글도 모조리 깨지게 된다. java 파일을 열어봤으나 UTF-8로 제대로 저장되어 있었고 컴파일 명령도 제대로 내렸는데 왜 안됐을 까 한참 고민했는데 생각해보니 내 서버는 모든 환경을 UTF-8로 사용하고 있었다.

중요한 점 : 컴파일 할 때 ‘javac -encoding utf8 *.java’와 같이 -encoding 옵션으로 자기에게 맞는 문자셋을 지정해줘야한다. 정상적으로 컴파일이 되었다면 프롬프트에 아무런 메시지도 나타나지 않아야한다.

클래스 파일을 컴파일해서 넣고 진행했다. 이제서야 제대로 작동한다. install 화면을 진행하고 내 사이트의 헤더 파일에 프로그램 소스코드를 삽입한 후 작동테스트를 시작했다. 그런데 또 하나의 문제점 발견. 내 사이트에서는 예를 들어, a.jsp 파일에 form 양식이 있고 여기서 데이터를 입력 받은 다음 b.jsp 파일에 POST 형식으로 데이터를 넘기게 되어있었는데 a.jsp 파일에 캐슬 소스코드를 넣고 SQL 인젝션 테스트를 했더니 아무런 경고조치 없이 돌아가는 것이었다. 왜 이러나 고민하다가 b.jsp 파일에다가도 캐슬 소스코드를 넣었더니 그제서야 제대로 인젝션이 차단되었다.

중요한 점 : 데이터를 페이지에서 페이지로 이동시키며 처리하는 경우는 양쪽 모두에다가 캐슬 소스코드를 넣어줘야한다.

이렇게 설치하고 테스트해보면 SQL 인젝션을 잘 차단해주며 로그도 정상적으로 쌓인다.

사용해보니 몇가지 아쉬운 점은..

  1. 설치문서가 조금 단순하다. 좀더 다양한 상황에서 테스트해주시고 설치문서를 써주셧으면.
  2. 로그 파일이 저장되는 위치를 바꿀 수가 없다. 리눅스에서는 /var/log 디렉토리가 주로 로그파일 디렉토리로 많이 쓰이는데 castle은 로그파일이 무조건 캐슬 설치 디렉토리의 log 디렉토리에만 저장된다.
  3. 한 사이트마다 캐슬을 하나씩 설치해야한다. 캐슬 하나만 설치해서 여러사이트, 여러도메인에서 공유해서 사용할 수 있는 방법이 있으면 좋을 것 같다. 내 서버의 여러 사이트들에도 캐슬을 적용하고 싶었는데 한 사이트당 하나씩 설치해야하니 너무 부담스러워서 그만뒀다. 이렇게 설치해서 사용할 수 있는 방법이 있다면 설치문서에라도 좀 추가되길.
  4. iptables 같은 방화벽 소프트웨어와 연동해서 공격IP를 자동차단 할 수 있으면 더 좋을 것 같다. 웹프로그램의 특성상 시스템명령 수행이 좀 어렵긴하지만 가능하지 않을까? Runtime 클래스를 이용해도 될것 같고 아니면 나중에 C로 한번 만들어봐야할 것 같다.

하여튼 너무 좋은 프로그램 개발해주셔서 감사~ ^^ 혹시 나중에 krcert 관계자분이 이 글을 보게된다면 꼭 불편한 점과 아쉬운 점은 고쳐주셨으면 좋겠다.

댓글남기기