DOS공격이 어떻게 가능한것일까요?

gurumong의 이미지

네트워크를 공부하고있습니다
OSI 모델이 나오면서 그 유명한 7계층에 대해서 설명하던데요
흐름제어라고 2계층(데이터링크층)과 4계층(전송층)에서 수행한다고 나와있던데

흐름제어를 사전을 찾아보면 아래와 같이 나와있습니다
"흐름 제어는 컴퓨터와 주변장치들 또는 네트웍 노드들 간의 데이터 흐름을 관리함으로써 데이터가 효율적인 속도로 처리될 수 있게 한다. 장치가 미처 처리하기 전에 너무 많은 데이터가 도착하면 오버플로우가 생기는데, 이는 데이터가 유실됨으로써 재전송 받아야만 한다는 것을 의미한다"

제가 글자 그대로 이해하기에는
많은 데이터가 오게되면 흐름제어를 통해서 데이터의 전송해오는 속도를 조절한다는것인데
그렇다면 많은 트래픽을 발생시키는 서비스 거부은 성공하기가 불가능한것이 아닌가요?

뭔가 제가 이미 알고있던것과 충돌이 일어나는것이...알수가없네요;

revol2236의 이미지

저는 해킹 기법 중에 딱하나 syn flooding이란 기법 밖에는 모릅니다..

이 기법은 threeway handshaking 의 취약점을 공략하여 만드는 건데요,,;;

먼저 해커는 syn값을 보냅니다,, 그리고 이세상에 없는 ip로 ip헤더를 바꿉니다

그러면 서버입장에서는 조작된 ip를 받고 그ip로 페킷을 보냈는데 자신에게 그신호가 돌아오지 않으니 device님 말처럼 재전송을 요구하며 time out을 걸고 가다립니다.

해커는 이상황에서 서버에 계속 조작된 ip로 패킷을 보내다보면은 트래픽이 증가되어

인터넷에 연결이 끊어지게 됩니다.

△써놓고 보니 뭔가 이상하네요;; 제가 지식이 짧아서 누구 잘아시는 분이 잘 설명좀 해주십쇼,;;
everyday linux

============================================

비가오면 사람들은 눈물흘리고

그빗물에 흘러내린 눈물감추고

darkmyth의 이미지

자원을 다 소모시켜 시스템을 뻗게 만드는 것 입니다.

계속적인 연결요청 syn 패킷을 보내게 되면 세션이 대기중으로 되는데 이것도 하나의 서비스 이기

때문에 계속적인 연결요청이 일어나면 자원을 다 소모하여 시스템이 뻗어 버리는 경우 입니다.

예전에 문제 되었던 광클릭 같은 경우 많은 트래픽으로 인하여 시스템의 부하가 커저버려 결국은

시스템이 뻗어 버리는 경우 입니다.

chadr의 이미지

데이터통신에서의 흐름제어는 "전송량"하고는 무관합니다.

데이터통신에서 흐름제어의 목적은 보내는 측이 받는 측보다 성능이 우세하여(데이터 전송능력)
받는 측에서 보내는 측의 속도만큼 받아내지 못 할 때 서로 낭비를 줄이기 위함입니다.

이는 데이터링크 층과(한개의 선으로 연결 되어있는(단일연결) 라우터 간 또는 라우터와 컴퓨터)
전송 층상(TCP/UDP)에서 이루어집니다.

만약에 흐름제어가 없다면 보내는 측에서는 자신이 할 수 있는 최대의 속도로 데이터를 밀어 재낄꺼고..
받는 측에서는 열심히 버퍼가 넘쳐 죽지 않도록 reject를 하거나 drop을 할 것입니다.

그런 경우에는 보내는 측에서 ack를 받지 못했으므로 다시 최대의 속대로 무한히 밀어 재끼는 삽질이 반복될 따름입니다.

이런 것을 해결 하기 위해서 흐름제어가 필요합니다.

흐름제어를 하면 보내는 측은 받는 측의 상태를 알게 됩니다. 받는 측에서 자신의 상태를 알려주게 되어있지요.
그에 따라서 보내는 측에서는 적절한 속도로 상대방에게 데이터를 보내게 됩니다. 만약에 데이터가 너무 빨리 보내서
받는 측이 이를 감당하지 못한다면 ack를 보내지 않거나 busy 비트를 세팅하여 ack를 보내게 됩니다.

그러면 보내는 측에서는 ack를 못받았으면 일정한 타임아웃 후에 받는 측에 어디까지 받았는지에 대한 응답을 요청하는
패킷을 보냅니다. 그때 상대방이 바빠서 더이상 못받으면 busy비트를 세팅하여 ack를 하게 됩니다. 그러면 보내는 측에서는
일정한 시간이 지난 후 다시 받는 측에게 상태를 물어봐서 ok가 오면 그때부터 다시 데이터를 보냅니다. 물론 만약에 받는 측이
여전히 바쁘다면 busy를 보낼 것입니다.

말씀 드렸듯이 흐름제어는 데이터링크와 전송에서 해당 되는 말이며 받는 측이 역량 부족으로 데이터 처리를 못할 시 대비한 것입니다.

따라서 DOS공격 또한 일반적인 흐름제어를 따르게 됩니다. 그렇지만 DOS공격 데이터도 다른 데이터와 다를바 없는 데이터이므로
열심히 받는 측에서 능력이 된다면 받습니다. 그리고 다른 데이터도 받습니다. 그런데 DOS데이터는 쓰레기입니다.
당연히 네트워크 전송 능력이 그만큼 떨어지며 syn만 보내고 그 다음으로 진행되지 않기 때문에 OS는 무수히 많은 연결을 위해 메모리를 할당하다가 out of memory로 죽거나 서비스 불가 상태로 들어가게 됩니다. 그게 DOS 공격입니다.

즉 DOS 공격은 TCP의 특징을 이용하여 OS를 죽이는 목적입니다.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

phonon의 이미지

ICMP의 한번에 전송하는 패킷의 사이즈를 증가시켜서 무한히 타겟서버에 보내면 서버의 자원 고갈이 발생합니다.
사내에서 재미로 동료의 PC를 먹통으로 만든 적이 있을 정도로 쉽게 누구든지 할 수 있습니다.
이런 방식으로 복수의 크래커가 동시에 보내면 상당히 빠른 속도로 서버의 서비스를 방해을 유발하며, 그 사이에 서버를 점유하는 공격방법으로 많이 사용되었습니다.

DDOS 공격에 대한 효율적인 방어책은 공격이 멈출 때까지 기다리는 방법 외에는 없다고 생각합니다.
보안 장비들로 어느 정도까지는 방어할 수 있지만, 서비스의 장해 발생을 완전히 막지는 못 합니다.

아래를 참조하세요.
http://www.anml.iu.edu/ddos/types.html

darkmyth의 이미지

ETRI에서 개발해서 테스트 한다는 소리는 들었던거 같았는데

지금은 어떻게 된지는 모르겠네요 ㅇㅅㅇ

http://www.betanews.net/article/399792

ggeagle의 이미지

보통 언급되는 형태는 적어도 잘 관리되는 리눅스라면 시스템이 소프트웨어적으로 죽지는 않습니다.
좀 성능이 딸리는 시스템이라면 키보드 인트럽트가 늦게 반응하고 간헐적으로 먹통과 같은 현상을 보이긴 합니다만
원인 현상을 제거해 주면 리부팅하지 않아도 시스템은 다시 정상적으로 만들 수 있습니다.
음.....개인적으로 리눅스 사용하시는 분들이 시스템 다운이란 말이 쉽게 나온다는게 이해가 안됩니다;;;
성능이 좋은 시스템이라면(물론 관리도 잘 되고 있고)현재 가장 광범위한 환경인 1Gbps 넷트웍환경에서
SYN 이나 ICMP 류의 알려진 공격형태로 시스템이 영향받지 않습니다.

다만 그럼에도 불구하고 어떤 시스템도 견딜 수 없는 공격이 있는데
매우 많은 클라이언트의 매우 다양한 경로로부터의 공격입니다.
매우 많은 랜덤한 클라이언트일 경우 방화벽 장비나 정책을 수립하기가 곤란하며 상황복구가 빨리 되지 않습니다.
다양한 경로일 경우 중간중간의 라우터들이 협조를 해 줘야 하는것이지요 역시 금방은 안됩니다.
이런 유형은 주로 PC 바이러스가 자동으로 보내는 그야말로 폭주공격입니다.
예전에 야후도 한 번 먹통된 적 있었죠?
언론에서는 야후 다운이라고 하지만 넷트웍 대역폭이 꽉 차서 접속이 안될 뿐 아마도 시스템 자체는 멀쩡했을 겁니다.
정말로 시스템까지 다운되었다면 야후...엉터리죠?
그 외의 몇 클라이언트거나 몇 경로거나 하는 비교적 단순한 경우는 기껏해봐야 1Gbps 라인도 꽉 채우지 못하기 때문에(나의
기가비트 환경을 꽉 채우려면 그 PC 에서부터 출발하여 내게 도착하는 모든 경로상의 대역폭이 기가급은 되어야 합니다.
PC 가 공격할 경우 이런 경우는 극히 드뭅니다.한달에 몇만원짜리 인터넷이라면 절대 이렇게는 안되지요.)
비록 반응이 느려진 서버라도 리부팅없이 대책수립이 가능합니다.
뭔 문제 있을 때마다 리부팅한다면 윈도우 쓰죠 왜 리눅스 습니까....

=========================

매일막걸리 한 병 = 상태메롱

=========================

매일막걸리 한 병 = 상태메롱

phonon의 이미지

상대방이 쨉을 날려도 벌레에 쏘는 정도라고 할까요.
분산된 네트워크를 동시에 공격할 수 있는 세력은 지구상에 손으로 꼽을 수 있을 겁니다. 중국이라면 다른 얘기지만.

요즘도 가끔씩 일본의 2ch과 한국의 dcinside사이에 교류전을 하더군요.
필요 없는 소모전이 아닐 수 없습니다. 이제는 하기 않기를 바랍니다만.

monovision의 이미지

야후도 아마 ping of death 로 다운됐었을 겁니다.
야후는 다운시키기에 덩치가 크긴 하나 그동안은 취약했었습니다.
야후는 지금까지 다운된 적이 몇 번 있었쬬 ㅡ.ㅡ;;;;

mach의 이미지

...
많은 데이터가 오게되면 흐름제어를 통해서 데이터의 전송해오는 속도를 조절한다는것인데
그렇다면 많은 트래픽을 발생시키는 서비스 거부은 성공하기가 불가능한것이 아닌가요?
...

질문자님께서 생각하고 계신 '트래픽'이란 말의 정의를 잘 되새겨 보시면 좋겠습니다.
보통 DoS공격은 네트워크라인 보다는(bps : 데이터 관점), 네트워크 장비(스위치, 서버등)의 CPU/Memory를 공격/고갈시켜 본연의 서비스를 못하게 하는 것이기 때문입니다.(pps : packet 관점)

* 동일 세션(양단간에 연결)에서 많은 트래픽은 공격이랄 수 없습니다.(데이터 양 관점)
- 보통, 1기가 이더넷을 사용한 양단간의 컴퓨터는 1기가 트래픽(데이터)을 처리하는데, 크게 문제가 없습니다.
- 10억바이트(1GB)를 1 세션으로 전송에는 무리없다는 얘기지요. 이러한 세션이 10개라면, 흐름제어 하면 됩니다....

* 다수 세션(양단간에 연결)에서 소수 트래픽은 공격이라 칭할 수 있습니다.(컨트롤 개수 관점)
- 과장되지만, 10억개의 세션(1G 세션)에서 1바이트씩, 전송하는 것은, 상상하기 어렵습니다.
- 이러한 경우, 흐름제어를 시작해보기도 어렵습니다. 세션을 생성/유지하기 조차 어렵겠군요.

그리고, 서비스 거부에 대한 해석의 차이가 있겠으나, 흐름제어로 인해 응답속도가 너무 느려지면(극단적인 예로, 1메가 바이트 전송에 10시간 등), 상황에 따라, 이것 또한 서비스 거부라 할 수 있을 것입니다.

권고하기는, 트래픽을 '데이터'와 '콘트롤'로 구분지어서 보시고, 각각의 처리에 따르는 CPU 및 Memory의 오버헤드를 생각해 보시면 보다 좋은 이해를 얻으실 것으로 보입니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

서지훈의 이미지

DoS 공격 아주 쉽게 일반인들도 가능한 방법은...
예를 들어 어떤 사이트가 정말 마음에 들지 않습니다.
그래서,이 사이트에 불만을 품은 사람들은 모음니다.
그 후 서로 얘기를 해서 특정시간에 이 사이트에 브라우저를 여러개로 접속을 하도록 합니다.
만약 해당 사이트가 100개 정도 연결을 서비스가 가능한 사이트 이고...
여기 가담한 사람이 50명 정도가 되며, 브라우저를 2개 이상만 띄우면 해당 사이트는 더 이상 정상적으로 접속이 안되겠죠 ?
이건 좀 원시적인 방법이 될테고요.

보통은 이러한 원리를 이용해서 바이러스 같은 형식으로 여러 컴퓨터에 감염을 시키고, 일정한 시간에 해당 사이트를 공격(접속)하는 방법이 일반적입니다.

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

김동수의 이미지

DoS 공격은 특수한 공격 방식이 정해져 있는 것이 아니라, Denial of Service 말 그대로 서비스 거부 공격입니다.
타켓 컴퓨터가 다운 되는 것이 목적이 아니라, 서비스를 못 하게 만드는 것에 목적이 있습니다.

꼭 많은 트래픽으로 인해서 서버를 다운시키는 것 뿐만이 아니라, 우주적인 의미론적 방법으로 재해석하면 IDC에 불을 지른다던지, 어부로 위장하고 그물로 해저 광케이블 절단, 서버가 있는 위치에 숨어들어가서 랜선을 뽑는 행위, 한 국가의 수장이 되어서 관계기관을 없에버리거나 권력을 악용하여 특정 사이트에 접속을 못하게 하는 행위(?!) 까지도 DoS 공격의 영역에 포함됩니다 :D

-------------------------------------
김동수 - Prototype for Evolution

김동수 - Prototype for Evolution

hiseob의 이미지

광범위하면서 파괴적인 DoS 의 정의군요 :D
맘에듭니다

[2097152byte 님은 대한민국에 DoS 을(를) 시전했습니다]

freestyle의 이미지

우선, 정확히 어떤 내용이었는지는 기억나지 않습니다만 TCP/IP 공부할 때 배운 건데,
프로토콜 내용 중에 그 자체로 공격의 소지가 있는 것들이 많습니다.

물론 계속 업데이트 되고 하면서 보완하고는 있지만, 워낙 처음 설계시에
보안까지 고려한 프로토콜 스택이 아니기에 자체적으로 문제점을 안고 있는 것이지요.

더구나 이를 구현하는 개발자가 약간만 방심해도 이런 틈은 생기기 마련입니다.

분해/조립, 전달, 전송 역할을 하는 각 레벨에서
메모리를 무한적 소비하게 한다거나, 다음 값 기다리려고 멍~ 때리고 기다리게 만든다거나,
가용 네트워크 자원을 모두 소모시키는 방법 등이 있습니다.

호기심이 생기신다면 본인이 테스트 환경 구축해서 테스트 서버에 공격해 보세요.
------------------------------------
Go to the U-City

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.