カッコウ2.0。 最高のオープンソースマルウェア分析プラットフォームをまとめる

カッコウサンドンボックスのロゴ

こんにちは、Habr!







4年前、Cuckoo Sandbox 1.2動的マルウェア分析プラットフォームアセンブリ手順公開しました。 この間、プロジェクトは印象的な機能と巨大なコミュニティを獲得することができました。最近バージョン2.0に更新され、1年半以上にわたってリリース候補段階にとどまっています。







最終的には、プロジェクトに現在あるすべてのグッズを含む完全なCuckoo Sandbox 2.0.5アセンブリマニュアルを準備しました。Cuckooパッケージはvenvにあり、rootなしで 、12を超えるセキュリティユーティリティをサンドボックスに追加します。 収集された資料の総計に基づいて、「これは現時点でインターネット上で公開されているすべてのステップガイドへの最も完全でよく考えられたステップです」と言うことを恐れません。 記事を最後までマスターした人のために-サンドボックスが組み立てられたときの対処方法と、オープンソースを使用した独自のツールによる情報セキュリティプロセスの自動化から最大の利益を得る方法について少しアドバイスします。 すべてのオタク、ウイルスアナリスト、警備員、SOC、CERT、CSIRTの人たち、そしてターミナルのボタンを突くのが大好きな人たち-カットへようこそ!







過去数年にわたってCuckooプロジェクトで多くのことが起こり、新しいツールが追加され、追加のソフトウェアのサポートが登場し、署名の数が何度も増加し、悪意のあるファイルの評価システムが評価され、UI全体が書き直されて、素敵なダークテーマを設定できるようになりました。







黒いUI







プロジェクトの積極的な変更は明らかです。サンドボックスは、マイクロリリースで更新され始め、特定され確認されたバグをすぐに解決しました。 開発者はブログの小さな変更すべてについて書き始めました。そこでプロジェクトのロードマップを見つけることができます。 残念ながら、「前」と「後」のサマリーテーブルをコンパイルするのが難しいほど多くの変更があったため、これらは異なる時代の2つのプラットフォームです。自分でブログを見る方が良いでしょう。







リリースサイクル







ブログをもっと頻繁にチェックすることをお勧めします。そのリリースの開発者はzer0mon VM アンチ検出ドライバーをmasterブランチに含めることを約束しますが、期限はリリース2.1.0に移行しますので、ご期待ください。



カッコウのコード自体はPIPパッケージマネージャーに移動し、カッコウは1つのコマンドで文字通り更新されます。







安定性は最初のリリースからのカッコウの主な欠点であるため、作業に安定性を必要とする顧客向けの商用サポートの開始に関するニュースはポジティブでした。 このプロジェクトで集められた資金が、開発者がアプリケーションの高品質な操作を達成するのに役立つことを本当に願っています。







カッコウエンタープライズ







ただし、プロジェクトの開始以来、インストールの問題は変わっていません-Cuckoo Sandboxは十分に文書化されており、常にバグがあるモジュールを使用すると、これは災害です。 一部のアプリケーションはまったく文書化されていません。HoneyDのように、どのように、そして何が機能するかを理解するには、コードを確認する必要があります。 かなりの時間を費やして、開発者のすべての推奨事項でカッコウを収集することができました-カッコウをVenvでラップし、カッコウが動作するためのルート権限を使用せずにすべてをゼロから設定します! 各ステップは、命令が完全に機能するようになるまで、テスト環境でのバックアップの複数のロールバックによって段階的に検証されます。







ビルド機能



開発者の推奨によると、Cuckoo Sandbox 2.0.5はESXiクラスターにインストールされたUbuntu OS 04/16/03上に構築されています。 Cuckooハイパーバイザーとして、VirtualBox 5.2が使用されます。 VMcloakの自動インストールスクリプトを使用して、VMのインストールが実行されます 。 VMcloakを使用すると、ゲストOSの脆弱な古いソフトウェアを探す必要がなくなり、ネットワークとPythonを構成する必要がなくなります。VMcloakは、Cuckoo Agentを含む必要なすべてをインストールし、1つのターミナルコマンドで構成します。 VMcloakを使用して、VMのクローン作成、管理、およびチューニングを行うことができます。 Windows 7 SP1 X64を仮想環境OSとして使用していますが、Cuckoo SandboxはXPから始まるすべてのバージョンのWindowsをサポートしています。

半年前、Cuckooの開発者は、VPNまたはTorを介してVMからのトラフィックをプロキシする機能を組み込みました。 この設定では、インターネットへの直接またはTor経由のアクセスを許可するという簡単な方法に決めました。







Cuckoo Sandboxに加えて、次のソフトウェアがインストールされます。







  1. Suricata -IDS。
  2. Snort -IDS。
  3. HoneyD-ハニーポット。
  4. InetSim-ネットワークエミュレーター。
  5. Tor-ゲストVMトラフィックのオニオンルーティング。
  6. Teserract-スクリーンショットのテキストを認識します。
  7. MitMproxy- 「中間者」によるSSLトラフィックの分析。
  8. Moloch -IDS(トラフィック分析に非常に便利で便利なユーティリティ)。
  9. SSDeep-ファジーハッシュ。
  10. 揮発性 -RAM探索フレームワーク。
  11. Distorm3-逆アセンブラー。
  12. Yara-マルウェアを認識して分類するためのユーティリティ。


13番目のポイントは、 IRMAファイルのアンチウイルス分析をストリーミングするためのプログラムであると想定されていましたが、IRMAがCuckooに含まれていた場合、Elasticでのレポートのアップロードが失敗し、開発者はまだこのバグに対する回答を提供せず、Elastic Indexを分析する時間はありませんでした したがって、このマニュアルにはIRMAの作成に関する項目がありますが、Cuckooとの統合は含まれません。 おそらくELKスタックの第一人者がいて、勇敢にバグを克服し、私の記事を補完する準備ができているでしょう。 ポート8080でIRMAを見つけて使用できます。







欠点として、サンドボックスのWebインターフェイスでMolochへの誤ったリンクを指摘できます。おそらく修正できますが、これは重要ではありません。Molochサービス自体がポート8005でハングし、これで十分です。







モロッコのバグ







Cuckooは、スキンデータをMongoDBに、システムデータをPostgresqlに、インデックスをElasticsearchに保存して、迅速な検索と選択、Json、HTML、PDFへのエクスポート、すべてのキャノン全体でSSLが構成されたNginx Webサーバーを介して動作します(自己署名証明書はカウントしません) UWSGIと組み合わせて。







このアセンブリは、Windowsサンドボックスでの分析専用に構成されています。 Android、OS X、およびLinuxは構成されていません。 この部分について質問がある場合は、PMに手紙を書いてください。理論的にはこれを行う方法は知っていますが、この機能は現時点では私の興味と仕事の範囲を超えています。







マニュアル機能



現在の記事では、自動インストールスクリプトは提供されません。 もちろん、私はそれを書くのが面倒ではありませんが、サンドボックスが正常に機能することは意味がありません。手動で収集し、 エラーを分析する内容と方法を注意深く確認する方が良いでしょう。 常に更新される多数の外部プログラムと対話するアプリケーションを引き続き収集します。 バグは避けられないので、後でスクリプトの何が問題になったかを把握するよりも、自分でバグを見つけた方がよいでしょう。







この記事では、前の記事のように、インストールされたプログラムのすべての依存関係を最初の行から始めませんでした。 Cuckooに接続されている特定のソフトウェアごとに、このソフトウェアのインストールセクションに依存関係が示されています。







Cuckooを使用した4年間のマルウェア分析により、明らかな線形関係が示されました。サービスのサンドボックスに接続するほど、機能が低下します。 したがって、すべての依存関係を一度に置くことは意味がありません。高齢のITおよび高齢者は、不安定なコンポーネントの販売を拒否でき、それらからの情報は冗長になるからです。 彼らが言うように、最高は善の敵です。







REST APIはこの記事には関係していません。これは非常に簡単ですが、現在の段階では必要ありません。







各ユーティリティの詳細は説明しません。重要な点のみをマークします。ユーティリティのより重要な部分については前回の記事で説明しますが、REST APIの有効化に関する情報もあります。







そして最も重要なこと-記事は、アセンブリの指示後数ヶ月間公開されており、何かがすでに変更されている可能性があります。 バグに遭遇した場合は、PMに連絡してください。







次に、最も一般的な質問に答えて、インストールを進めます!







しかし、私があなたのLinuxが苦手で、サンドボックスが本当に必要な場合



この質問への答えは簡単です-Windows Sysinternalsでのオンラインサンドボックスまたは混乱の使用。









組立



だから、理論的な部分は後ろにあり、私たちは練習を始めます!







OSアップデート



システムパッケージを更新します。







sudo apt update sudo apt upgrade -y
      
      





カッコウの依存関係



Cuckooの依存関係をインストールします。







 sudo apt install python python-pip python-dev libffi-dev libssl-dev libfuzzy-dev -y sudo apt install python-virtualenv python-setuptools -y sudo apt install libjpeg-dev zlib1g-dev swig -y sudo -H pip install -U pip
      
      





Virtualbox



extpackを使用してVirtualboxをインストールします。







 cd /opt sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian xenial contrib" >> /etc/apt/sources.list.d/virtualbox.list' sudo wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - sudo apt update && sudo apt install virtualbox-5.2 -y VBOX_LATEST_VERSION=$(curl http://download.virtualbox.org/virtualbox/LATEST.TXT) sudo wget http://download.virtualbox.org/virtualbox/${VBOX_LATEST_VERSION}/Oracle_VM_VirtualBox_Extension_Pack-${VBOX_LATEST_VERSION}.vbox-extpack sudo vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-${VBOX_LATEST_VERSION}.vbox-extpack
      
      





カッコウサンドボックス



Venvをインストールし、PIP経由でCuckooをアクティブにしてインストールします。







 sudo adduser cuckoo sudo usermod -a -G vboxusers cuckoo cd /home/cuckoo su cuckoo virtualenv cuckoo . /home/cuckoo/cuckoo/bin/activate pip install -U pip setuptools psycopg2 yara-python weasyprint pycrypto pydeep easy_install distribute pip install -U cuckoo pip install weasyprint==0.36 pip install m2crypto==0.24.0 cuckoo cuckoo community deactivate sudo apt install python-m2crypto exit
      
      





Elasticsearch用のJava



ElasticはJavaで書かれているため、Javaをインストールする必要があります。







 sudo add-apt-repository ppa:webupd8team/java sudo apt update && sudo apt install oracle-java8-installer -y sudo bash -c "echo 'JAVA_HOME=\"/usr/lib/jvm/java-8-openjdk-amd64\"' >> /etc/environment" source /etc/environment
      
      





Db



ここで、すべてのデータベースをインストールして設定します。変数「db_passwd」は、Postgresデータベースのランダムパスワードを生成します。独自に設定する場合は、忘れずに設定してください。

Cuckooは廃止されたElastic 2ndバージョンを使用しています。これに注意を払い、誤って5.x +バージョンをインストールしないでください。







 sudo apt install mongodb -y sudo apt install postgresql libpq-dev -y sudo pip install psycopg2 db_passwd=$(date +%s | sha256sum | base64 | head -c 32 ; echo) echo "CREATE USER cuckoo WITH PASSWORD '$db_passwd';" | sudo -u postgres psql echo "CREATE DATABASE cuckoo;" | sudo -u postgres psql echo "GRANT ALL PRIVILEGES ON DATABASE cuckoo to cuckoo;" | sudo -u postgres psql wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list sudo apt update && sudo apt install elasticsearch -y sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service sudo service elasticsearch stop cd /home/cuckoo/ sudo mkdir /home/cuckoo/ESData sudo chown root:elasticsearch ESData sudo chmod 777 /home/cuckoo/ESData sudo usermod -a -G elasticsearch cuckoo sudo bash -c "cat >> /etc/elasticsearch/elasticsearch.yml <<DELIM cluster.name: es-cuckoo node.name: es-node-n1 node.master: true node.data: true bootstrap.mlockall: true path.data: /home/cuckoo/ESData network.bind_host: 0.0.0.0 DELIM" sudo service elasticsearch start sudo curl -X PUT -d @'/home/cuckoo/.cuckoo/elasticsearch/template.json' 'http://localhost:9200/_template/cuckoo'
      
      





やら+ルール



Yaraの最新バージョンをインストールし、YaraルールをCuckooに追加します。







 cd /opt sudo apt install dh-autoreconf flex bison libjansson-dev libmagic-dev -y sudo wget https://github.com/VirusTotal/yara/archive/v3.7.1.tar.gz sudo tar -zxf v3.7.1.tar.gz cd yara-3.6.3/ sudo ./bootstrap.sh sudo ./configure --with-crypto --enable-cuckoo --enable-magic sudo make sudo make install sudo -H pip install -U yara-python cd /home/cuckoo/.cuckoo/yara/ su cuckoo sudo git clone https://github.com/lehuff/cuckoo-yara-rules.git sudo cp cuckoo-yara-rules/cuckoo-yara-rules.py . sudo rm -rf cuckoo-yara-rules sudo python cuckoo-yara-rules.py sudo chown -R cuckoo:cuckoo /home/cuckoo/.cuckoo/
      
      





SSDeep



SSDeepをインストールします。







 cd /opt sudo -H pip install -U ssdeep sudo git clone https://github.com/bunzen/pySSDeep.git cd pySSDeep sudo python setup.py build sudo python setup.py install cd -
      
      





ボラティリティ



Volatilityのインストールは簡単ですが、venvからCuckooを取得して確認するのはあまり良くありません。Cuckooとともにvenvにインストールすることもオプションではなく、Cuckooライブラリのバージョンを依存関係で変更します。 3行目は、この問題を解決する松葉杖です。より忠実な方法で友達を作る方法を誰かが考えている場合は、書いてください。







 sudo apt install pcregrep libpcre++-dev -y sudo -H pip install -U git+https://github.com/kbandla/pydeep.git sudo apt install volatility -y cp -r /usr/lib/python2.7/dist-packages/volatility* /home/cuckoo/cuckoo/lib/python2.7/site-packages sudo chown cuckoo:cuckoo /home/cuckoo/cuckoo/lib/python2.7/site-packages/* mv /home/cuckoo/.cuckoo/signatures/windows/volatility_sig.py /home/cuckoo/.cuckoo/signatures/windows/volatility_sig.py.deactivate
      
      





TCPDump



TCPダンプに到達しました。







 sudo apt install tcpdump apparmor-utils -y sudo aa-disable /usr/sbin/tcpdump sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump sudo chmod +s /usr/sbin/tcpdump
      
      





Teserract



簡単にセットアップでき、接続もできますが、OCRの魅力に気付きませんでした。







 sudo apt install tesseract-ocr -y
      
      





PDFのフォント



このマジックPDFレポートがないと、レポートは生成されません。







 sudo -H pip install -U cairocffi sudo apt install wkhtmltopdf xvfb xfonts-100dpi -y
      
      





Mitmproxy



SSLトラフィックをスヌーピングできる非常に便利なライブラリ。 Cuckooはバージョン0.18.2パッケージのみを理解することに注意してください。







 sudo apt install libarchive13 libxml2-dev libxslt1-dev -y sudo -H pip install -U mitmproxy==0.18.2 su cuckoo cd ~ mitmproxy + ctrl-c sudo cp ~/.mitmproxy/mitmproxy-ca-cert.p12 /home/cuckoo/.cuckoo/analyzer/windows/bin/cert.p12 sudo chown cuckoo:cuckoo /home/cuckoo/.cuckoo/analyzer/windows/bin/cert.p12 exit
      
      





Tor



ここではすべてが非常に簡単です。







 sudo apt install tor -y sudo sh -c 'echo TransPort 192.168.56.1:9040 >> /etc/tor/torrc' sudo sh -c 'echo DNSPort 192.168.56.1:5353 >> /etc/tor/torrc'
      
      





すりかた



最初は、編集する必要のある構成と場所を記述したかったのですが、Suricataを克服して作業のすべての欠陥を取り除くことができるようになるまでに、構成に対して多くの編集が行われ、0が文書化されたため、構成全体を公開します。 さらに、元のルールファイルは変更されません。







 sudo add-apt-repository ppa:oisf/suricata-stable sudo apt update && sudo apt install suricata -y echo "alert http any any -> any any (msg:\"FILE store all\"; filestore; noalert; sid:15; rev:1;)" | sudo tee /etc/suricata/rules/cuckoo.rules sudo touch /etc/suricata/suricata-cuckoo.yaml
      
      





/etc/suricata/suricata-cuckoo.yaml
 %YAML 1.1 --- vars: address-groups: HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]" EXTERNAL_NET: "any" HTTP_SERVERS: "$HOME_NET" SMTP_SERVERS: "$HOME_NET" SQL_SERVERS: "$HOME_NET" DNS_SERVERS: "$HOME_NET" TELNET_SERVERS: "$HOME_NET" AIM_SERVERS: "$EXTERNAL_NET" DNP3_SERVER: "$HOME_NET" DNP3_CLIENT: "$HOME_NET" MODBUS_CLIENT: "$HOME_NET" MODBUS_SERVER: "$HOME_NET" ENIP_CLIENT: "$HOME_NET" ENIP_SERVER: "$HOME_NET" port-groups: HTTP_PORTS: "80" SHELLCODE_PORTS: "!80" ORACLE_PORTS: 1521 SSH_PORTS: 22 DNP3_PORTS: 20000 MODBUS_PORTS: 502 FILE_DATA_PORTS: "[$HTTP_PORTS,110,143]" FTP_PORTS: 21 default-rule-path: /etc/suricata/rules rule-files: - botcc.rules - ciarmy.rules - compromised.rules - drop.rules - dshield.rules - emerging-attack_response.rules - emerging-chat.rules - emerging-current_events.rules - emerging-dns.rules - emerging-dos.rules - emerging-exploit.rules - emerging-ftp.rules - emerging-imap.rules - emerging-malware.rules - emerging-misc.rules - emerging-mobile_malware.rules - emerging-netbios.rules - emerging-p2p.rules - emerging-policy.rules - emerging-pop3.rules - emerging-rpc.rules - emerging-scan.rules - emerging-smtp.rules - emerging-snmp.rules - emerging-sql.rules - emerging-telnet.rules - emerging-tftp.rules - emerging-trojan.rules - emerging-user_agents.rules - emerging-voip.rules - emerging-web_client.rules - emerging-web_server.rules - emerging-worm.rules - tor.rules - http-events.rules - smtp-events.rules - dns-events.rules - tls-events.rules classification-file: /etc/suricata/classification.config reference-config-file: /etc/suricata/reference.config default-log-dir: /var/log/suricata/ stats: enabled: yes interval: 8 outputs: - fast: enabled: no filename: fast.log append: yes - eve-log: enabled: yes filetype: regular filename: eve.json types: - alert: metadata: yes tagged-packets: yes xff: enabled: no mode: extra-data deployment: reverse header: X-Forwarded-For - http: extended: yes - dns: query: yes answer: yes - tls: extended: yes - files: force-magic: no - smtp: - ssh - stats: totals: yes threads: no deltas: no= - flow - unified2-alert: enabled: no filename: unified2.alert xff: enabled: no mode: extra-data deployment: reverse header: X-Forwarded-For - http-log: enabled: no filename: http.log append: yes - tls-log: enabled: no filename: tls.log append: yes - tls-store: enabled: no - dns-log: enabled: no filename: dns.log append: yes - pcap-log: enabled: no filename: log.pcap limit: 1000mb max-files: 2000 mode: normal use-stream-depth: no honor-pass-rules: no - alert-debug: enabled: no filename: alert-debug.log append: yes - alert-prelude: enabled: no profile: suricata log-packet-content: no log-packet-header: yes - stats: enabled: yes filename: stats.log totals: yes threads: no - syslog: enabled: no facility: local5 - drop: enabled: yes filename: drop.log append: yes - file-store: enabled: yes log-dir: files force-magic: no force-filestore: no - file-log: enabled: yes filename: files-json.log append: yes force-magic: no - tcp-data: enabled: no type: file filename: tcp-data.log - http-body-data: enabled: no type: file filename: http-data.log - lua: enabled: no scripts: logging: default-log-level: notice default-output-filter: outputs: - console: enabled: yes - file: enabled: yes level: info filename: /var/log/suricata/suricata.log - syslog: enabled: no facility: local5 format: "[%i] <%d> -- " af-packet: - interface: eth0 cluster-id: 99 cluster-type: cluster_flow defrag: yes - interface: default pcap: - interface: eth0 - interface: default pcap-file: checksum-checks: auto app-layer: protocols: tls: enabled: yes detection-ports: dp: 443 dcerpc: enabled: yes ftp: enabled: yes ssh: enabled: yes smtp: enabled: yes mime: decode-mime: yes decode-base64: yes decode-quoted-printable: yes header-value-depth: 2000 extract-urls: yes body-md5: no inspected-tracker: content-limit: 100000 content-inspect-min-size: 32768 content-inspect-window: 4096 imap: enabled: detection-only msn: enabled: detection-only smb: enabled: yes detection-ports: dp: 139, 445 nfs: enabled: no dns: tcp: enabled: yes detection-ports: dp: 53 udp: enabled: yes detection-ports: dp: 53 http: enabled: yes request-body-limit: 0 response-body-limit: 0 libhtp: default-config: personality: IDS request-body-limit: 100kb response-body-limit: 100kb request-body-minimal-inspect-size: 32kb request-body-inspect-window: 4kb response-body-minimal-inspect-size: 40kb response-body-inspect-window: 16kb response-body-decompress-layer-limit: 2 http-body-inline: auto double-decode-path: no double-decode-query: no server-config: modbus: enabled: no detection-ports: dp: 502 stream-depth: 0 dnp3: enabled: no detection-ports: dp: 20000 enip: enabled: no detection-ports: dp: 44818 sp: 44818 ntp: enabled: no asn1-max-frames: 256 coredump: max-dump: unlimited host-mode: auto unix-command: enabled: yes filename: custom.socket legacy: uricontent: enabled engine-analysis: rules-fast-pattern: yes rules: yes pcre: match-limit: 3500 match-limit-recursion: 1500 host-os-policy: windows: [0.0.0.0/0] bsd: [] bsd-right: [] old-linux: [] linux: [] old-solaris: [] solaris: [] hpux10: [] hpux11: [] irix: [] macos: [] vista: [] windows2k3: [] defrag: memcap: 32mb hash-size: 65536 trackers: 65535 max-frags: 65535 prealloc: yes timeout: 60 flow: memcap: 128mb hash-size: 65536 prealloc: 10000 emergency-recovery: 30 vlan: use-for-tracking: true flow-timeouts: default: new: 30 established: 300 closed: 0 bypassed: 100 emergency-new: 10 emergency-established: 100 emergency-closed: 0 emergency-bypassed: 50 tcp: new: 60 established: 600 closed: 60 bypassed: 100 emergency-new: 5 emergency-established: 100 emergency-closed: 10 emergency-bypassed: 50 udp: new: 30 established: 300 bypassed: 100 emergency-new: 10 emergency-established: 100 emergency-bypassed: 50 icmp: new: 30 established: 300 bypassed: 100 emergency-new: 10 emergency-established: 100 emergency-bypassed: 50 stream: memcap: 64mb checksum-validation: yes inline: auto reassembly: memcap: 256mb depth: 0 toserver-chunk-size: 2560 toclient-chunk-size: 2560 randomize-chunk-size: yes host: hash-size: 4096 prealloc: 1000 memcap: 32mb decoder: teredo: enabled: true detect: profile: medium custom-values: toclient-groups: 3 toserver-groups: 25 sgh-mpm-context: auto inspection-recursion-limit: 3000 prefilter: default: mpm grouping: profiling: grouping: dump-to-disk: false include-rules: false include-mpm-stats: false mpm-algo: auto spm-algo: auto threading: set-cpu-affinity: no cpu-affinity: - management-cpu-set: cpu: [ 0 ] - receive-cpu-set: cpu: [ 0 ] - worker-cpu-set: cpu: [ "all" ] mode: "exclusive" prio: low: [ 0 ] medium: [ "1-2" ] high: [ 3 ] default: "medium" detect-thread-ratio: 1.0 luajit: states: 128 profiling: rules: enabled: yes filename: rule_perf.log append: yes limit: 10 json: yes keywords: enabled: yes filename: keyword_perf.log append: yes rulegroups: enabled: yes filename: rule_group_perf.log append: yes packets: enabled: yes filename: packet_stats.log append: yes csv: enabled: no filename: packet_stats.csv locks: enabled: no filename: lock_stats.log append: yes pcap-log: enabled: no filename: pcaplog_stats.log append: yes nfq: nflog: - group: 2 buffer-size: 18432 - group: default qthreshold: 1 qtimeout: 100 max-size: 20000 capture: netmap: - interface: eth2 - interface: default pfring: - interface: eth0 threads: 1 cluster-id: 99 cluster-type: cluster_flow - interface: default ipfw: napatech: hba: -1 use-all-streams: yes streams: ["0-3"] mpipe: load-balance: dynamic iqueue-packets: 2048 inputs: - interface: xgbe2 - interface: xgbe3 - interface: xgbe4 stack: size128: 0 size256: 9 size512: 0 size1024: 0 size1664: 7 size4096: 0 size10386: 0 size16384: 0 cuda: mpm: data-buffer-size-min-limit: 0 data-buffer-size-max-limit: 1500 cudabuffer-buffer-size: 500mb gpu-transfer-size: 50mb batching-timeout: 2000 device-id: 0 cuda-streams: 2
      
      





そして最後に、権利を修正しましょう。







 sudo mkdir /var/run/suricata sudo chown cuckoo:cuckoo /var/run/suricata sudo chown -R cuckoo:cuckoo /etc/suricata sudo chown -R cuckoo:cuckoo /var/log/suricata sudo touch /etc/suricata/threshold.config
      
      





ETupdate



Suricataコミュニティ署名の自動更新を構成します。







 cd /opt sudo git clone https://github.com/seanthegeek/etupdate.git sudo cp etupdate/etupdate /usr/sbin sudo /usr/sbin/etupdate -V sudo crontab -e 0 0 * * * /usr/sbin/etupdate -V
      
      





鼻水



Suricataをより信頼しているので、ルールを追加しませんでした。







 sudo apt install snort -y
      
      





構成時に、デフォルトのインターフェースとサブネット192.168.0.0/16を指定します。







 sudo chown -R cuckoo:cuckoo /etc/snort/ sudo chown -R cuckoo:cuckoo /var/log/snort/
      
      





VMcloakおよびWindows 7 SP1 X64



VM Cuckooの自動展開に最も便利なプログラム。 これにより時間は大幅に短縮されますが、作成者は作業ロジックを書き直し、もちろんドキュメントを更新しませんでした。 VMcloakでの作業のすべての喜びを理解し、次に何をするかを理解するには、 GitHubのユーティリティコードを調べるか、 古いドキュメント読むことをお勧めします。

最も注意深いホーカーは、 https://github.com/jbremer/vmcloakプロジェクトの公式リポジトリがhttps://github.com/tweemeterjop/vmcloakスクリプトで以下で使用されているものと異なることに気付くでしょう。 フォークに関して、オリジナルはvRDEを含める方法を知りませんでした-カスタムゲストVMでのRDPプロトコルの実装。

おそらく正しいオプションは、元のコードを取得してvRDEを終了することですが、フォークが元のコードからそれほど遠くない場合は、以下のようにフォークを使用できます。 セットアップ時に、リポジトリとそのフォークには実質的に違いはありませんでした。

私自身の経験からお話しします-vRDEが必要です。ターゲットの攻撃ドキュメントがWordパスワードで保護されており、サンドボックスでウイルスが機能するためにパスワードを入力する必要があるか、インストールする必要のあるインストーラーにウイルスが残っています。 vRDEがなければ、これには問題があります。 また、vRDE OSをさらに構成するには、それも必要になります。







 cd /opt sudo apt install libyaml-dev libpython2.7-dev genisoimage -y sudo git clone -b vrde https://github.com/tweemeterjop/vmcloak.git cd vmcloak/ sudo cp /home/cuckoo/.cuckoo/agent/agent.py vmcloak/data/bootstrap/ sudo -H pip install -r requirements.txt sudo python setup.py install cd .. sudo mkdir -p /mnt/win7 sudo mount -o loop,ro ~/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso /mnt/win7/ sudo vmcloak-vboxnet0 sudo vmcloak-iptables 192.168.56.0/24 ens160 cd /home/cuckoo su cuckoo vmcloak init --vrde --resolution 1280x1024 --ramsize 4096 --win7_x64 --product professional --cpus 2 win7x64 vmcloak install --vrde win7_x64 python27 pillow adobepdf chrome cuteftp dotnet40 flash java silverlight vcredist wic vmcloak modify --vrde win7_x64
      
      





Windows 7を構成する









 vmcloak modify --vrde win7_x64
      
      





VMが起動し、RDP経由で接続できます。 Win10を使用している場合-リモートデスクトップのタイルアプリケーションを使用しないでください。接続がユーザー名とパスワードなしでVMに接続されると、st迷とトランス状態に陥ります。







リストの次の項目はオプションですが、誤検知の数を減らし、マルウェアの作業を簡素化するために、次のすべてを無効(または有効)にすることをお勧めします。 仕事中のすべての従業員が使用するゲストVMにソフトウェアをインストールする必要はありません。







レポートの追加データの例:







偽陽性







気づくでしょう! 次のすべては、Windows 7 SP1 x64でのみ実行する必要があります。他のOSでは、アクションが異なる場合があります。







新しいサンドボックスを使用してしばらくしてから、私のリストには次の項目が含まれるようになりました。









独自のOS向けに独自の命令をコンパイルするシーケンス:







  1. サンドボックス内の正当な実行可能ファイルを確認します。
  2. たとえば、time.microsoft.comへのアピールなど、追加情報が表示された場所とタブを確認します。
  3. Googleを開き、無効にする方法を確認します。
  4. 書き込み、オフにします。


CuckooへのVMの追加



新しく構成されたゲストOSのスナップショットを作成し、Cuckooに追加すると同時に、プリインストールされたVM cuckoo1を構成から削除します。







 vmcloak snapshot win7_x64 win7_x64node1 192.168.56.101 . /home/cuckoo/cuckoo/bin/activate cuckoo machine --add win7x64node1 192.168.56.101 --platform windows --snapshot vmcloak cuckoo machine --delete cuckoo1 deactivate
      
      





モロク



ネットワークトラフィックを操作するための最もクールなツール。 他のネットワークアナライザーとは異なり、Molochの賭けは、多くの機能、タイムライン、グラフなどを備えた分析ツールキットに基づいています。 私は非常に最近それについて学び、その前にあまり便利ではないマルコムを使用したことを非常に残念に思います。 Molochの主な利点の1つは、Cuckooからのすべてのスキャンのすべてのネットワークパケットを一度に組み合わせて分析できることです。 ええと、Elasticsearchと連携することで、Molochは膨大な量のデータを処理できます。







これは、この美しさがどのように見えるかです(公式リポジトリの画面):







モロクGSH







まあ、それもインストールします。







 sudo apt install libjson-perl -y cd /opt sudo wget https://files.molo.ch/builds/ubuntu-16.04/moloch_0.20.2-2_amd64.deb sudo dpkg -i moloch_0.20.2-2_amd64.deb sudo /data/moloch/bin/Configure
      
      





次に、vboxnet0インターフェイス、Molochログインとパスワード、Elasticsearch IPアドレスを指定する必要があります。







 sudo /data/moloch/db/db.pl http://localhost:9200 init sudo /data/moloch/bin/moloch_add_user.sh cuckoo cuckoo cuckoosandbox --admin
      
      





InetSim



仮想ローカルネットワークをインストールして、ウイルスがサンドボックスに単独で存在しないようにします。 エミュレートされたサービスの設定はデフォルトのままで、18のエミュレートされたサービスがWebを除いて判明しました。







 sudo su echo "deb http://www.inetsim.org/debian/ binary/" > /etc/apt/sources.list.d/inetsim.list wget -O - http://www.inetsim.org/inetsim-archive-signing-key.asc | apt-key add - apt update apt install inetsim exit
      
      





/etc/inetsim/inetsim.conf構成では、Cuckooと競合しないように、HTTPおよびHHTPS Webサービスをコメントアウトする必要があります。







 #start_service http #start_service https
      
      





IRMA



IRMA







レポートをElasticsearchにアップロードする問題のため、IRMAはサンドボックスと統合されていません。 しかし、これはユーティリティの展開とテストを妨げるものではありません。 IRMAはVagrantでコンパイルされ、 Ansibleの厳密にバージョン2.2.1.0を介して自動的に展開されます。







 sudo apt install vagrant -y cd /opt sudo wget https://releases.hashicorp.com/vagrant/2.0.2/vagrant_2.0.2_x86_64.deb sudo dpkg -i vagrant_2.0.2_x86_64.deb sudo -H pip install -U ansible==2.2.1.0
      
      





IRMAをダウンロードします。







 sudo git clone https://github.com/quarkslab/irma cd irma/ansible
      
      





/ opt / irma / ansible / Vagrantfileをファイルに追加して、VMからポート8080へのリダイレクトを追加します

19行目:







 config.vm.network "forwarded_port", guest: 80, host: 8080
      
      





IRMAをインストールします。







 sudo vagrant up
      
      





ハニー



HoneyDは、最も古く、最も機能的なハニポットです。 欠点は1つだけです。数年前に更新が停止しました。 適切なフォークを見つけるためのスキルが正常に適用された後、 Ansibleを介してHoneyDをインストールする比較的新しいバージョンが見つかったため、急いで使用しました。 ハニポットでは、1つのホストのみを構成しました。 公式マニュアルを使用して、少なくともサブネット全体を構成できます。







 cd /opt/ sudo git clone https://github.com/Bifrozt/honeyd-ansible.git cd honeyd-ansible/ sudo ansible-playbook honeyd.yml sudo touch /usr/share/honeyd/config.conf
      
      





設定を保存します。







/usr/share/honeyd/config.conf
 create default set default default tcp action filtered set default default udp action filtered set default default icmp action filtered create windows set windows personality "Microsoft Windows XP Professional SP3" set windows uptime 1728650 set windows maxfds 35 set windows default tcp action reset add windows tcp port 135 open add windows tcp port 139 open add windows tcp port 445 open set windows ethernet "08:00:27:81:1d:0c" bind 192.168.56.103 windows
      
      





Webサーバー



Nginxをインストールし、証明書を生成し、http2サポートを有効にします。







 sudo add-apt-repository ppa:nginx/development sudo apt update sudo apt install nginx -y sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 sudo mkdir /etc/nginx/ssl sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt sudo -H pip install -U uwsgi cd /home/cuckoo/ sudo mkdir /var/log/uwsgi/ sudo mkdir /etc/uwsgi sudo chown cuckoo:cuckoo /var/log/uwsgi/ sudo chown cuckoo:cuckoo /etc/uwsgi/ su cuckoo
      
      





次に、UWSGI構成を追加します。







/etc/uwsgi/cuckoo.ini
 [uwsgi] plugins = python socket = /tmp/uwsgi.sock chmod-socket = 664 master = true processes = 4 virtualenv = /home/cuckoo/cuckoo module = cuckoo.web.web.wsgi uid = cuckoo gid = cuckoo static-map = /static=/home/cuckoo/cuckoo/local/lib/python2.7/site-packages/cuckoo/web/static env = CUCKOO_APP=web env = CUCKOO_CWD=/home/cuckoo/.cuckoo
      
      





そしてnginxの設定、IPとサイト名の変更:







/ etc / nginx / sites-available / cuckoo-web
 upstream _uwsgi_cuckoo_web { server unix:/tmp/uwsgi.sock; } server { listen 80; listen [::]:80; server_name cuckoo.test.ru; return 301 https://10.0.0.3$request_uri; server_tokens off; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name cuckoo.test.ru; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=15768000"; ssl_stapling on; ssl_stapling_verify on; server_tokens off; location / { client_max_body_size 1G; proxy_redirect off; proxy_set_header X-Forwarded-Proto $scheme; uwsgi_pass _uwsgi_cuckoo_web; include uwsgi_params; } }
      
      





ここで、www-dataユーザーをcuckooグループに追加し、simlinkにより構成を有効にします。







 sudo adduser www-data cuckoo sudo ln -s /etc/nginx/sites-available/cuckoo-web /etc/nginx/sites-enabled/ sudo systemctl reload nginx
      
      





カッコウの構成



そして最後に、最も重要なこと-サンドボックスに収集されたすべてを結合します。 長い間何が起こっているかを説明するために、それは無意味であり、パラメーターの85%が直感的です。一部のパラメーターを理解するのが困難な場合は、96ページから始まる公式ドキュメントを使用することをお勧めします。 または、主なことは私の最後の記事を覗くことです。 以下の私のファイルをコピーして使用することは最悪のオプションではありませんが、あなた自身の危険とリスクがあります。







/home/cuckoo/.cuckoo/conf/auxiliary.conf
 [sniffer] enabled = yes tcpdump = /usr/sbin/tcpdump bpf = [mitm] enabled = yes mitmdump = /usr/local/bin/mitmdump port_base = 50000 script = mitm.py certificate = bin/cert.p12 [services] enabled = yes services = honeyd timeout = 0 [reboot] enabled = yes
      
      





/home/cuckoo/.cuckoo/conf/cuckoo.conf
 [cuckoo] version_check = yes delete_original = no delete_bin_copy = no machinery = virtualbox memory_dump = yes terminate_processes = no reschedule = no process_results = yes max_analysis_count = 0 max_machines_count = 0 max_vmstartup_count = 10 freespace = 1024 tmppath = rooter = /tmp/cuckoo-rooter [feedback] enabled = no name = company = email = [resultserver] ip = 192.168.56.1 port = 2042 force_port = no upload_max_size = 134217728 [processing] analysis_size_limit = 134217728 resolve_dns = yes sort_pcap = yes [database] connection = postgresql://cuckoo:Supersecretpassword4habr@localhost:5432/cuckoo timeout = 60 [timeouts] default = 120 critical = 60 vm_state = 60
      
      





/home/cuckoo/.cuckoo/conf/memory.conf
 [basic] guest_profile = Win7SP1x64 delete_memdump = yes [malfind] enabled = yes filter = yes [apihooks] enabled = no filter = yes [pslist] enabled = yes filter = no [psxview] enabled = yes filter = no [callbacks] enabled = yes filter = no [idt] enabled = yes filter = no [timers] enabled = yes filter = no [messagehooks] enabled = no filter = no [getsids] enabled = yes filter = no [privs] enabled = yes filter = no [dlllist] enabled = yes filter = yes [handles] enabled = yes filter = yes [ldrmodules] enabled = yes filter = yes [mutantscan] enabled = yes filter = yes [devicetree] enabled = yes filter = yes [svcscan] enabled = yes filter = yes [modscan] enabled = yes filter = yes [yarascan] enabled = yes filter = yes [ssdt] enabled = yes filter = yes [gdt] enabled = yes filter = yes [sockscan] enabled = yes filter = no [netscan] enabled = no filter = no [mask] enabled = no pid_generic =
      
      





/home/cuckoo/.cuckoo/conf/processing.conf
 [analysisinfo] enabled = yes [apkinfo] enabled = no decompilation_threshold = 5000000 [baseline] enabled = no [behavior] enabled = yes [buffer] enabled = yes [debug] enabled = yes [droidmon] enabled = no [dropped] enabled = yes [dumptls] enabled = yes [extracted] enabled = yes [googleplay] enabled = no android_id = google_login = google_password = [memory] enabled = yes [misp] enabled = no url = apikey = maxioc = 100 [network] enabled = yes whitelist_dns = no allowed_dns = [procmemory] enabled = yes idapro = no extract_img = no extract_dll = no dump_delete = no [procmon] enabled = yes [screenshots] enabled = yes tesseract = /usr/bin/tesseract [snort] enabled = yes snort = /usr/sbin/snort conf = /etc/snort/snort.conf [static] enabled = yes pdf_timeout = 60 [strings] enabled = yes [suricata] enabled = yes suricata = /usr/bin/suricata conf = /etc/suricata/suricata-cuckoo.yaml eve_log = eve.json files_log = files-json.log files_dir = files socket = [targetinfo] enabled = yes [virustotal] enabled = yes timeout = 60 scan = yes key =   virustotal [irma] enabled = no timeout = 300 scan = yes force = yes url = http://172.16.1.30
      
      





/home/cuckoo/.cuckoo/conf/reporting.conf
 [feedback] enabled = no [jsondump] enabled = yes indent = 4 calls = yes [singlefile] enabled = yes html = no pdf = yes [misp] enabled = no url = apikey = mode = maldoc ipaddr hashes url [mongodb] enabled = yes host = 127.0.0.1 port = 27017 db = cuckoo store_memdump = yes paginate = 100 username = password = [elasticsearch] enabled = yes hosts = 127.0.0.1 timeout = 300 calls = no index = cuckoo index_time_pattern = yearly cuckoo_node = [moloch] enabled = yes host = 10.0.0.3:8005 insecure = no moloch_capture = /data/moloch/bin/moloch-capture conf = /data/moloch/etc/config.ini instance = cuckoo [notification] enabled = no url = identifier = [mattermost] enabled = no url = myurl = username = cuckoo show_virustotal = no show_signatures = no show_urls = no hash_filename = no hash_url = no
      
      





/home/cuckoo/.cuckoo/conf/routing.conf
 [routing] route = none internet = ens160 rt_table = main auto_rt = yes drop = no [inetsim] enabled = yes server = 192.168.56.1 [tor] enabled = yes dnsport = 5353 proxyport = 9040 [vpn] enabled = no vpns = vpn0 [vpn0] name = vpn0 description = Spain, Europe interface = tun0 rt_table = tun0
      
      





/home/cuckoo/.cuckoo/conf/virtualbox.conf
 [virtualbox] mode = headless path = /usr/bin/VBoxManage interface = vboxnet0 machines = win7_x64node1 [win7_x64node1] label = win7_x64node1 platform = windows ip = 192.168.56.101 snapshot = vmcloak interface = resultserver_ip = 192.168.56.1 resultserver_port = 2042 tags = options = osprofile = Win7SP1x64 [honeyd] label = honeyd platform = linux ip = 192.168.56.103 tags = service, honeyd options = nictrace noagent
      
      





カッコウのスタートアップとサービス



次に、停電が発生するたびに、不必要な支援なしでサービスが自動的に起動するようにします。







スーパーバイザーをインストールし、Cuckooスタートアップ構成を追加します。







 sudo apt install supervisor -y sudo systemctl stop supervisor
      
      





スーパーバイザーファイルを作成します。







/etc/supervisor/conf.d/vmcloak-internet.conf
 [program:vmcloak-vboxnet0] command=vmcloak-vboxnet0 directory=/usr/local/bin/ [program:vmcloak-ifconfig] command=vmcloak-iptables 192.168.56.0/24 ens160 directory=/usr/local/bin/ [group:vmcloak-internet] programs = vmcloak-vboxnet0, vmcloak-ifconfig
      
      





/etc/supervisor/conf.d/cuckoo.conf
 [program:cuckoo-rooter] command = /home/cuckoo/cuckoo/bin/cuckoo rooter --sudo autorestart = true [program:cuckoo-daemon] command = /home/cuckoo/cuckoo/bin/cuckoo -d -m 10000 user = cuckoo startsecs = 30 autorestart = true [program:cuckoo-process] command = /home/cuckoo/cuckoo/bin/cuckoo process p%(process_num)d process_name = cuckoo-process_%(process_num)d numprocs = 4 user = cuckoo autorestart = true [group:cuckoo] programs = cuckoo-rooter, cuckoo-daemon, cuckoo-process [program:distributed] command = /home/cuckoo/cuckoo/bin/python -m cuckoo.distributed.worker user = cuckoo autostart = false autorestart = true environment = CUCKOO_APP="worker",CUCKOO_CWD="/home/cuckoo/.cuckoo"
      
      





/etc/supervisor/conf.d/uwsgi.conf
 [program:uwsgi] user = cuckoo directory = /usr/bin command = bash -c 'sleep 5 && uwsgi --ini /etc/uwsgi/cuckoo.ini' autorestart = true stderr_logfile = /var/log/uwsgi/uwsgi-err.log stdout_logfile = /var/log/uwsgi/uwsgi-out.log stopsignal = QUIT
      
      





そして適用:







 sudo systemctl restart supervisor sudo supervisorctl -c /etc/supervisor/supervisord.conf reload
      
      





残りのサービスを起動するためのスクリプトを作成します(スーパーバイザーを介して構成することは可能ですが、そのエレガントなソリューションを適用できないバグがいくつかありました)。







/opt/serv.sh
 sleep 30 sudo systemctl start molochcapture.service sudo systemctl start molochviewer.service sudo inetsim cd /opt/irma/ansible/ sudo vagrant up sudo honeyd -f /usr/share/honeyd/config.conf -i vboxnet0
      
      





そして、クラウンに追加します。







 sudo chmod +x serv.sh sudo crontab -e @reboot /bin/sh /opt/serv.sh
      
      





カッコウの後に生命はありますか?または「カッコウを集めた!そして次に何をすべきか?」



?

, — .

, — . , , . .

— - . , , .







— 3 :







  1. . , , , Cuckoo Sandbox, IDS, UEBA, USM, SIEM ;
  2. (Incident Response Platform, IRP);
  3. . (Threat intelligense Platform, TIP).


, , — IRP TheHive Project . , 2.







  1. TheHive — .
  2. Cortex — .


TheHive Project stack.

ハイブ







TheHive — , , - . TheHive . (case) , , "DDoS " :









, , — , , TLP .







TheHive UI.

TheHive UI







TheHive , , API TheHive4Py , , SIEM, . — . , IP, , , , . , . — Cortex . , API ( ) .

— , TheHive (Case). (Tasks), , " ", " " . , Cortex VirusTotal, , AlienVault OTX , , , Cuckoo Sandbox 8-10 . . -, . Cortex TheHive.







MISP

ミス







TheHive Cuckoo MISP , : Firewall IP , — .

, , , , . TheHive KPI.







MISP, , 47 , CERT, . MISP , , — Proxy MISP, — .

: — open source, , Cuckoo Sandbox. , -?







ご清聴ありがとうございました!







便利なリンク



, , , , — .












All Articles