前回はDockerでOpen reflectorの環境を構築する経緯やDDoS攻撃のアンプ・リフレクションについてご紹介しました。
今回は具体的にどのようにDockerを構築したのか技術的な内容を中心に解説させていただきます。
ここでご紹介するコードや環境を改変して攻撃を行うのは絶対にいけません。不正アクセスになりますので、自分のPCの環境内で学習目的でご利用ください。
さっと環境についておさらいします。
Dockerホストで構築した環境は攻撃者のコンテナとOpen Reflectorのコンテナ、そして攻撃先となるWebコンテナから構成されています。下の絵の様な感じです。
まずdocker-compose ファイルから解説します。イメージを準備した後、このファイルのように作成するとdocker-compose up -dを実行することで、簡単にdocker環境がたちあがります。
以下ファイルの中身になります。
version: '3'
services: target: build: ../image/target image: target container_name: target cap_add: - ALL networks: 1_user_net: ipv4_address: 172.16.0.200 volumes: - /media/sf_share:/share
dns1: build: ../image/dns image: dns container_name: dns1 cap_add: - ALL networks: 1_user_net: ipv4_address: 172.16.0.101 volumes: - ./docker/dns/zones:/data/zones - ./docker/dns/conf:/data/conf - /media/sf_share:/share
dns2: build: ../image/dns image: dns container_name: dns2 cap_add: - ALL networks: 1_user_net: ipv4_address: 172.16.0.102 volumes: - ./docker/dns/zones:/data/zones - ./docker/dns/conf:/data/conf - /media/sf_share:/share
dns3: build: ../image/dns image: dns container_name: dns3 cap_add: - ALL networks: 1_user_net: ipv4_address: 172.16.0.103 volumes: - ./docker/dns/zones:/data/zones - ./docker/dns/conf:/data/conf - /media/sf_share:/share
attack-dns: build: ../image/attack_dns image: attack-dns container_name: attack-dns cap_add: - ALL networks: 1_user_net: ipv4_address: 172.16.0.50 dns: - 172.16.0.100
networks: 1_user_net: driver: bridge ipam: driver: default config: - subnet: 172.16.0.0/24
上から解説しますと、servicesの下にコンテナを定義しています。targetが今回攻撃先となるコンテナになり、起動時にIPアドレスを172.16.0.200を割り当てています。
dns1~3まで、open reflectorになります。IPアドレスはそれぞれ172.16.0.101~103を割り当ててます。
attack-dnsは攻撃者のコンテナになります。IPアドレスは172.16.0.50を割り当ててます。
ここまで見ていただくとコンテナのイメージをビルドしてそのイメージでDockerコンテナが作成されます。open reflectorは共通のイメージを利用していますので、ここで必要な数のコンテナを起動するともっと多くのOpen reflectorを立ち上げることができます。
では今度はコンテナの元となるイメージをビルドするためのDcokerfileを見ていきます。
以下は攻撃先としているtargetコンテナで利用されているイメージのDockerfileになります。
このファイルに基づいてビルドされ、イメージファイルが作成されます。そしてそのイメージからコンテナが作成されます。
このイメージはコンテナ上で攻撃パケット収集ができるようにtcpdumpなどインストールしています。
FROM ubuntu:18.04
ENV HOME=/root DEBIAN_FRONTEND=noninteractive TZ=Asia/Tokyo RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Install packages RUN apt-get update
# Install the required packages for desktop RUN apt-get install -y supervisor wget curl net-tools vim-tiny #Install network utility RUN apt-get install -y apache2 tcpdump iproute2 iputils-ping dnsutils # Clean up RUN apt-get clean && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
COPY supervisord/* /etc/supervisor/conf.d/
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
次のDockerfileはOpen reflectorとなるDNSです。bindの他tcpdumpなどがインストールされています。
今回はどこからでもキャッシュDNSとして利用できるようにセキュリティ対策していないDNS設定にしております。
FROM ubuntu:18.04
ENV HOME=/root DEBIAN_FRONTEND=noninteractive TZ=Asia/Tokyo RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update -q RUN apt-get -y upgrade RUN apt-get -y install supervisor iproute2 iputils-ping tcpdump vim
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install bind9 rsyslog dnsutils RUN rm -rf /var/lib/apt/lists/*
COPY conf/* /etc/bind/
COPY supervisord/* /etc/supervisor/conf.d/
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
下はnamed.confファイルのoptionsの設定になります。allow-recursion { any; }でどこからでも再帰問い合わせができる状態になっております。
options {
recursion yes;
allow-recursion { any; };
allow-query-cache { any; };
allow-query { any; };
directory "/var/cache/bind";
dnssec-validation auto;
auth-nxdomain no;
listen-on-v6 { any; };
};
次に攻撃者のイメージを構築するための、Dcokerfileになります。dns_amp.pyというスクリプトでDNSアンプ攻撃を行っておりますが、docker起動時にこのスクリプトが実行されるような作りになっております。
このスクリプトはこちらのページで確認できます。以前scapyをご紹介した時に利用したスクリプトと同じです。
FROM ubuntu:18.04
ENV HOME=/root DEBIAN_FRONTEND=noninteractive TZ=Asia/Tokyo RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Install packages RUN apt-get update RUN apt-get install -y wget curl net-tools iputils-ping dnsutils python3-pip tcpdump RUN pip3 install scapy # Clean up RUN apt-get clean && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
ADD dns_amp.py /tmp/dns_amp.py
RUN chmod +x /tmp/dns_amp.py
CMD ["/tmp/dns_amp.py"]
今回、docker-composeを利用することで、簡単に環境を構築できましたが、docker関連の詳細は割愛させていただきました。
ざっくりとした内容ですが、dockerはさくっと環境が構築できるところは魅力的です。皆さんも是非、dockerを楽しんでください!
Comments