네트웍 서버가 대비해야할 공격들...

stoneshim의 이미지

tcp 기반의 네트웍 서버 개발이 거의 완료되고 있습니다.
패킷은 xml로 되어 있습니다.
WAN 환경에서 동작합니다.

클라이언트 프로그램이 있지만, 모든 사용자가 클라이언트 프로그램으로만 접근해 주기를 기대할 수는 없어서, 버퍼 오버플로 등의 공격에 대비해야 할것 같은데요.

예상되는 공격이 어떤것들이 있을지 궁금합니다.

더불어 그러한 공격에 대한 해결책이나, 참고할만한 문서, 사이트 등을 알려주시면 더욱 고맙겠습니다.

생각나는대로 이야기 해주세요~~.

jyj9782의 이미지

방화벽 제품을 설치하는게 제일 좋을듯 싶습니다.
일정부분은, 뭐 서버셋팅이나 안전한 코딩기법을활용해서 방어할수 있지만, 여러 부가작업이 많아지고 효율성이 떨어질수 있으니, 돈이 조금있으시다면, 적절히 필요한 통합보안솔루션 같은것을 구매하셔서, 설치하시는게 제일 좋은 해결책일듯합니다. 네트웍 기반으로 공격들어올때. 방화벽에서 걸러주는게 제일 나을테니까요. 그리고 상위레이어공격등은 xml 관련된 공격가능성에 대해서 한번 찾아보시기 바랍니다. 약간의 자료가 있을것으로 사료되지만, 제가 xml 을 공부하지 않은관계로 제공해드리지는 못하겠네요. 정보보안을 담당하시는 분이 계시면, 그분에게 소스를 검수받으셔도 좋을듯 합니다.

힘내세요.

dudungsil의 이미지

일단 방화벽으로 해결할수 없는 문제를 해결하는게 가장 중요한 일입니다. 변조된 클라이언트에서 악성값을 보내는 경우인데 이게 어찌 보면 가장 큰 문제입니다. 전송되는 데이터가 그냥 xml 코드라면 보고 누구나 다 알수 있습니다. 크리티컬한 데이터라면 기본적으로 암호화하고 변조된 사항을 알아내기 위해서 md5같은 방법을 사용할수 있겠죠. 잘못된 패킷만 걸러낼수 있어도 안정도가 100%는 올라갈겁니다.

추가로 클라이언트에서 보내는 데이터를 신뢰하지 않고 철저히 검사하기등 기본적으로 준수해야할 사항만 지킨다면 나머지는 그리 큰 문제는 아니네요.

서버가 아주 중요한곳에 사용되는게 아니라면 공격받으면 그냥 죽어버리는게 속편합니다. 만드신 프로그램은 침탐시스템도 아닌데 어떠한 경우에도 안죽는걸 만드는데는 너무나 많은 노력이 소모됩니다.

역설적인 말인데 그리 중요한 서버라면 앞단에 방화벽에 있을테고 방화벽 도입을 검토하지 않는다면 그다지 크리티컬한 일이 아니라는 말이기도 합니다. 모든 분야에 다재다능한 프로그램을 만드는건 현실성이 없습니다. 적절한 부분에서 타협을 하시고 나머지는 프로에게 맡겨야 합니다.

산넘어 산

stoneshim의 이미지

예.. 답변 감사드립니다.

잘 아시겠지만, 제가 말씀드린 WAN 환경이란 인터넷의 불특정 다수를 대상으로 특정 tcp 포트로 서비스를 한다는 의미입니다.

제가 잘 몰라서 그러는데, 이렇게 인터넷에서 서비스하는 특정 tcp 포트로 들어오는 패킷을 앞에서 방화벽이 정상적인 요청임을 확인하면 뒤로 넘겨주고, 아니면 패킷을 버리거나 연결을 close 하거나 ... 이런 역할도 하나요?

예를들면 웹서버 앞단에 tcp 80 포트에 대해서도 방화벽에서 어떤 설정을 해주어서 정상적인 경우에만 웹서버에게 전달하도록 할 수도 있는건가요?

우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자

dudungsil의 이미지

요즘에는 악성코드(바이러스나 웜)가 섞인 패킷도 구분을 해내는 스위치가 있다고는 하는데 그런 장비를 구경해본 적은 없으니 말을 할 입장이 못됩니다. ^^

방화벽단에서 정상적인 패킷을 구분해 내는 방법은 없습니다. 특정 제한을 줄수는 있죠. 비정상적인 빈도로 접속을 한다든지 필요이상의 데이터를 보낸다든지 하는거 말입니다. 이런건 자동으로 블럭도 해주고 시간되면 풀어주기도 하고 뭐 세팅하기 나름입니다.

잘 알려진 서비스들 (web, telnet, smtp등)이 아니라면 공격으로 인한 문제가 생기는 경우는 드물어요. 프로토콜 자체가 알려지지 않았기때문에 유효한 패킷을 생성해서 서버를 테스트하는게 어렵거든요. 그래서 암호화가 필요하다는거구요.

예전에는 mmorpg 프로토콜 알아내서 가짜로 보내보고 반응을 보는 재미가 있었는데 요즘에는 그런 재미를 찾기가 어렵죠. stoneshim님께서 만든 서버에서 그런 재미를 찾는 사람이 있을지도 모르니 일단 그걸 조심해야죠.

그리고 well-known port를 다 막아버리면 새벽에 눈꼽 띠면서 불려 나가는 일은 프로그램 버그인 경우말고는 없을겁니다.

ps. 그렇게 했는데도 루트따내고 서버를 헤집고 돌아 다니는 사람이 생긴다면 그건 天災니까 프로그래머에게는 면책권이 주어진다고 주장하세요. -_-;;

수정: syntax -_-;;

산넘어 산

박영선의 이미지

최전방에서 서비스하는 서버라면 차라리 체념하세요...

윗분 말씀처럼 최소한의 방어만 해놓고 계속 모니터링을 하는거죠.

디비나 다른 중요한 정보가 들어있는것도 아닐테니 여유가되면 서버 하나 더 붙여서 로드밸런싱하면 부하분산겸 이중화되는것이니 그게 낫겠죠.

일반적으로 웹서버는 트래픽이 많아서 방화벽 안쪽에 잘 안두는걸로 알고있습니다.

돌다가 죽으면 바꾸면 그뿐이니까요...

^^;;

stoneshim의 이미지

예... 좋은 의견들 감사합니다.

현재 로드밸런서를 사용하고 있으며, 서비스용 포트 이외의 포트는 모두 닫혀진 상태입니다.

일단 어플리케이션 패킷 단에서의 버퍼 오버플로 가능성만 검토/제거하고, 암호화에 신경을 쓰는것으로 정리가 되는것 같습니다.

그럼... 또 작업 스케쥴에 들어가 봐야겠군요. 감사합니다.

우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자

mushim의 이미지

DOS 에 의한 공격이 가장 위협적일 수 있습니다.

만약 아주 중요한 서비스라면 요새 각광을 받고 있는 L7 스위치를 사용하시는게 좋을 것입니다. (고가라는게 문제이지만..)

물론 호스트단에서도 방화벽을 띄워서. 예상대는 공격을 막을 준비가 되어 있어야 합니다.

방화벽에서 미리 모든 공격을 다 예방할수는 없지만, 비상시에는 특정한 종류의 공격을 막을 준비가 되어 있어야 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.