netfilter 프레임웍을 조작하여 패킷의 진행 경로를 조절할 수 ?

박인의 이미지

  [INPUT]--->[1]--->[ROUTE]--->[3]--->[4]--->[OUTPUT]
                       |            ^
                       |            |
                       |         [ROUTE]
                       v            |
                      [2]          [5]
                       |            ^
                       |            |
                       v            |
                    [INPUT*]    [OUTPUT*]
[1]  NF_IP_PRE_ROUTING
[2]  NF_IP_LOCAL_IN
[3]  NF_IP_FORWARD
[4]  NF_IP_POST_ROUTING
[5]  NF_IP_LOCAL_OUT
[*]  Network Stack      

무지함속에서 질문을 드려서 정말 죄송합니다..

질문1] [1] 지점에서 후킹하여 커널 모듈에서 NF_ACCEPT를 리턴하면 원래의 체인으로 흘러가는데, 이 패킷의 다음 체인을 원하는 대로 변경할 수 있나요? 예를들면 원래 ip계층으로 올라갈 패킷을 그냥 다시 MAC 계층으로 보내어 다른 호스트에게 전송 할 수 있는지.. 가능하다면 어떠한 방법으로 가능한지..

제가 생각한 방법으로는... 모듈에서 NF_STOLEN을 리턴하여 패킷에 대하여 잊도록 하고, llc계층의 llc_build_and_send_ui_pkt 시스템콜을 호출하여 llc 계층으로 다시 내려 보낼 수 있지 않나 생각됩니다.. 조언좀 부탁드립니다..

질문2] 리눅스 브리지는 자기 MAC주소가 아닌 패킷도 모두 MAC 계층 상단으로 올라오는데.. 이게 어떻게 가능한가요? 보통 NIC단에서 Destination MAC 주소가 자신이 아니면 패킷을 discard 하는거로 알고있는데.. 정말 궁금합니다..

질문3] 리눅스 브리지는 netfilter 프레임웍에서 동작하는것으로 알고있는데.. 그렇다면 [1]지점에서 후킹하여 ip계층으로 올릴수 있나요?

읽어주셔서 감사합니다~~ ^^

bleu의 이미지

원하시는 정확한 답은 못 드릴텐데.. 제가 아는 내용만 기술 하겠습니다.

질문 1.
-->다른 호스트에게 전송 할 수 있는지..
가능 한걸로 알고 있습니다. 넷필터 함수를 제가 기억 하지 못해서
구현 방법까지는 설명 드리기 힘든데.
대략 알고 있는 지식으로는 [1]에서 수집한 패킷에 대해서
destination 정보를 수정해서 xmit(정확한지 모르겠습니다) 하시면
되는것으로 알고 있습니다
절차 상으로는 [1]->패킷 수정->[4]으로 진행 가능 한것으로 알고 있습니다.

질문 2.promiscous(철자가 틀렸을지도 흐흐) 모드인 경우에 그렇게 되는것으로 알고 있습니다

질문3. [1]지점에서 바로 ip로 올라갈수는 없는걸로 알고 있습니다.
가능하다면...다른분이 알려주시길..저도 궁금하거든요^^?

가능하지 않다고 생각 하는부분이 hooking point에서 패킷을 핸들링 하는 시점은 user level에서
하게 되고 다시 inject를 하는 경우에 kernel로 내려가는데 이때 inject포인트가 있는것으로 알고 있습니다.
inject point라는게 그림에서 보여주신 부분들이 될수 있는걸로 알고 있습니다.
정확히 구분 하면 inject point와 수집 포인트가 구분이 될텐데..
오래전 기억이라서 다시 문서를 보면서 찾아봐야해서....(귀차니즘...이...발동을 죄송합니다..)

ps. 틀린 내용이 있을수 있습니다..그냥 참고만 하세요..

익명 사용자의 이미지

^^; 많은 도움이 되었습니다..

좋은 하루 되세요 ^-^

댓글 달기

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