HackMD
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    [HACK#43 iptablesによるファイアウォール構築](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack43-iptables%E3%81%AB%E3%82%88%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E6%A7%8B%E7%AF%89) [HACK#44 OpenBSDのPF(PacketFilter)によるファイアウォール構築](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack44-openbsd%E3%81%AEpfpacketfilter%E3%81%AB%E3%82%88%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E6%A7%8B%E7%AF%89) [HACK#45 Windowsファイアウォールによるコンピュータ保護](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack45-windows%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E4%BF%9D%E8%AD%B7) [HACK#46 オープンポートの閉鎖とプロトコルのブロック](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack46-%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E9%96%89%E9%8E%96%E3%81%A8%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF) [HACK#47 Windowsファイアウォールを置き換える](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack47-windows%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%82%92%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B) [HACK#48 認証ゲートウェイの作成](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack48-%E8%AA%8D%E8%A8%BC%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%81%AE%E4%BD%9C%E6%88%90) [HACK#49 外部との不要な通信の制限](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack49-%E5%A4%96%E9%83%A8%E3%81%A8%E3%81%AE%E4%B8%8D%E8%A6%81%E3%81%AA%E9%80%9A%E4%BF%A1%E3%81%AE%E5%88%B6%E9%99%90) [HACK#50 ファイアウォールの検証](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack50-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%81%AE%E6%A4%9C%E8%A8%BC) [HACK#51 NetfilterによるMACフィルタリング](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack51-netfilter%E3%81%AB%E3%82%88%E3%82%8Bmac%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0) [HACK#52 Torを止める](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB#hack52-tor%E3%82%92%E6%AD%A2%E3%82%81%E3%82%8B) # HACK#43 iptablesによるファイアウォール構築 ## 概要 - フィルタリングルールを適切に設定して、Linuxのネットワークを保護する - ファイアウォールは、攻撃者がコンピュータの脆弱箇所にたどり着く前に、望まれないアクセスを阻止することが可能である - 不正アクセスを阻止するためにはフィルタリングルールが適切に設定されていなければならない ## 実践 Linuxの最新のフィルタリング機能はNetfilterと呼ばれるコンポーネントで、```iptables```コマンドで操作する ※<b>Netfilter</b>:カーネルのコンポーネント ※<b>iptables</b>:Netfilterを操作するためのユーザーランドツール(OSが動作するのに必要なカーネル以外の部分) ### チェイン 入力、出力、転送するパケットに適用するルールのリスト | チェイン | 概要 | | --- | --- | | INPUT | 入力(受信)するパケットに対するルール | | OUTPUT | 出力(送信)するパケットに対するルール | | FORWARD | 転送するパケットに対するルール | | PREROUTING | 受信時に宛先アドレスを変換するルール | | POSTROUTING | 送信時に送信元アドレスを変換するルール | ### フィルタリングポリシーの設定 まず、各チェインのデフォルトの動作(フィルタリングポリシー)を設定する <pre> iptables -P チェイン名 ターゲット </pre> -Pオプションはポリシーの設定を表している ターゲットは受け取ったパケットをどのように扱うかを指定する ※詳しくは後述の表を参照 ### フィルタリングルールの設定 フィルタリングルールを設定して、パケットを通過させるルールを詳細に指定する <pre> iptables コマンド チェイン名 パラメータ -j ターゲット </pre> コマンドはチェインをどのように扱うかを指定する 下記によく使うコマンドを示す | コマンド名 | 概要 | | --- | --- | | -A | 指定チェインに1つ以上の新しいルールを追加 | | -D | 指定チェインから1つ以上のルールを削除 | | -N | 新しいユーザー定義チェインを作成 | | -X | 指定ユーザー定義チェインを削除 | | -I | 指定したチェインにルール番号を指定してルールを挿入する | パラメータは特定のIPだけやプロトコルだけ遮断といった細かい制御を指定する 下記にパラメータの例を示す | パラメータ | 概要 | | --- | --- | | -s (--source) | パケットの送信元(IPアドレス)を指定 | | -d (--destination) | パケットの宛先(IPアドレス)を指定 | | -p (--protocol) | チェックされるパケットのプロトコル(tcp,udpなど)の指定 | | -i (--in-interface) | パケットを受信するインタフェース名(eth0など)を指定 | | -o (--out-interface) | パケットの送信先インターフェース名を指定 | | -j (--jump) | ターゲットを指定 | 上記パラメータに加えてさらに詳細な条件を指定できる下記のような拡張パラメータもある 拡張パラメータには、拡張であることを明示することなく利用できる「-p」の後に追記するタイプと、「-m」で拡張を明示してから追記するタイプがある <center><b>明示不要のタイプの例</b></center> | 拡張パラメータ | 概要 | | --- | --- | | --sport | Source Port<br>送信側のポート番号を```-p tcp```か```-p udp```の後に指定 | | --dport | Destination Port<br>受信側のポート番号を```-p tcp```か```-p udp```の後に指定 | <center><b>明示が必要なタイプの例(state拡張モジュール)</b></center> | | 概要 | | --- | --- | | state | state拡張モジュールを読み込み<br>パケットを追跡することでステートフルインスペクションが可能になる | | --state | 追跡しているパケットの状態を指定<br>新規か既に許可をしたものかなどを指定 | <center><b>--stateで指定するパケットの状態</b></center> | パケットの状態 | 概要 | | --- | --- | | NEW | 新規の接続 | | ESTABLISHED | 既に許可された接続 | | RELATED | 新規ではあるが許可された接続 | | INVALID | パラメータの不明な無効な接続 | ※<b>ステートフルインスペクション</b>:パケットの状態監視 <pre> iptables -A INPUT -p tcp -m state --state NEW -j DROP 「TCPの受信パケットの内、新規の接続に関しては破棄」 </pre> ターゲットには下記のような種類がある | ターゲット | 概要 | | --- | --- | | ACCEPT | パケットの通過を許可 | | DROP | パケットを破棄(応答を返さない) | | REJECT | パケットを拒否(ICMPメッセージを返信) | | REDIRECT | 特定ポートにリダイレクト | | LOG | マッチしたパケットのログを記録 | 下記でフィルタリングルール設定の具体例について解説する ### 確認方法 ファイアウォールのテストをするために、以下の環境を用意します。 ※本HACKではパケットフィルタリングのルールを追加していくのですが、本の通りの設定を行うには少々時間がかかるので、こちらで考えたシナリオで実施します。 <pre> [ホスト1](ルータ役) eth0 192.168.1.XXX (ブリッジネットワーク) eth1 10.0.0.3 (内部ネットワーク) [ゲスト1](送信役) eth0 10.0.0.5 (内部ネットワーク) ホストOS2 [ホスト2](Webサーバー) eth0 192.168.1.XXX (ブリッジネットワーク) Apacheを起動 </pre> 環境が用意できましたら、まずはルータ役である[ホスト1]の設定を行いましょう。 <pre> ホスト1# sysctl net.ipv4.ip_forward=1 (パケット転送有効化) ホスト1# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE (送信元IPが10.0.0.0/24でeth0から送出されるパケットの場合はIPマスカレードを行う) </pre> これで[ホスト1]はパケット転送とIPマスカレードが行えるようになりました。 では次に、[ゲスト1]の設定を行います。 デフォルトゲートウェイの設定がまだ完了していないので、パケットの宛先が自身のネットワーク外の場合、どこに送信すれば良いかわからない状態です。 <pre> ゲスト1# route add default gw 10.0.0.3 ゲスト1# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1002 0 0 eth0 default 10.0.0.3 0.0.0.0 UG 0 0 0 eth0 </pre> これでデフォルトゲートウェイの設定が完了しました。パケットの宛先が自身のネットワーク外の場合、ルータ役である[ホスト1]に送られるようになりました。 では実際に外部にパケットが送信できるか試してみましょう。 <pre> ゲスト1# ping www.google.com ゲスト1# ping {ホスト2のIPアドレス} </pre> 応答があれば設定は上手く適用できています。 失敗した場合はルータ役の[ホスト1]IPマスカレードの設定等でミスしている可能性があるので確認してみてください。 これでHACKの内容を試すための下準備が完了しました。 ではこれから特定の宛先へのパケット転送のみを許可する設定を行います。 まずはパケットの転送を行う通信は破棄する設定をします。 <pre> ホスト1# iptables -P FORWARD DROP ゲスト1# ping www.google.com ゲスト1# ping {ホスト2のIPアドレス} </pre> 応答がなくなっていれば、設定は上手くいっています。 では次に特定の宛先へのパケット転送は許可する設定を行います。 今回は[ホスト2]へのhttp要求の転送は許可する設定を追加します。 <pre> ホスト1# iptables -A FORWARD -m state --state NEW -d {ホスト2のIPアドレス} -p tcp --dport 80 -j ACCEPT </pre> これで本に記載されているWebサーバー[ホスト2]への80番ポートへの通信を許可するルールが追加されました。 では[ゲスト1]でWebサーバーに対してhttp要求をブラウザなどでしてみましょう。 <pre> http://192.168.1.XXX [ホスト2] 接続中... </pre> おそらく繋がらないと思います。 なぜかというと、上で追加したルールは「TCPコネクションを新規に確立する時のパケット」を通すルールで、「TCPコネクションが確立した後のパケット」を通すルールが追加できていません。 そのため、本通りの設定ではできません。そのルールを追加してあげる必要があります。※参照「--stateで指定するパケットの状態」 <pre> ホスト1# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT </pre> これで接続ができるようになります。この時に関しては宛先IPアドレス等は指定しません。 なぜなら、「TCPコネクションが確立した後のパケット」になるので、「TCPコネクションを確立する時のパケット」さえ制御していれば問題にならないからです。 逆に宛先等を指定してしまうと、返りのパケットの転送に関してもルールを追記しなければならなくなってしまうので、かなり手間になります。 次に、ステートフルインスペクションという仕組みがありますが、実は上記のルールを一部変更することで実装できます。 そもそも、ステートフルインスペクションとは「動的パケットフィルタリング」とも言い、フィルタリングルールを動的に設定するものです。 <pre> ホスト1# iptables -D FORWARD -m state --state NEW -d {ホスト2のIPアドレス} -p tcp --dport 80 -j ACCEPT ホスト1# iptables -A FORWARD -m state --state NEW -j ACCEPT </pre> 上のコマンドでは、「TCPコネクションを確立する時のパケットの転送先が[ホスト2]、なおかつhttp要求の場合許可する」から「「TCPコネクションを確立する時のパケットの転送の場合許可する」というルールに変更しました。 これで実装が完了です。 上記の設定では「FORWARD」のポリシーをDROP(破棄)としているので、外部から内部へ転されるパケットの通信は拒否するようになっています。しかし、内部から外部への通信で確立したTCPコネクションのパケットの送受信に関しては許可するようになっています。 つまり、普段は外部から内部へのパケット転送は拒否するが、内部から外部へのパケット転送があった時は、一時的に「外部から内部へのパケット転送を許可する」ということになります。 # HACK#44 OpenBSDのPF(PacketFilter)によるファイアウォール構築 ## 概要 - OpenBSD上でPF(PacketFilter)を用いてファイアウォールを構築する - 以前使われていたIPFilterより機能性や柔軟性に優れている ## 実践 NetfilterとPFには多くの共通機能がある 例えば、Netfilterは拡張モジュール(stateなど)で簡単に機能を拡張できるが、PFにもトラフィックの正規化や拡張ログなどの優れた機能がある ### 確認方法 OpenBSDは需要が低く、このHACKは優先度が低いので省略します # HACK#45 Windowsファイアウォールによるコンピュータ保護 ## 概要 - Windowsファイアウォールを適切に設定して最大限の保護を実現する - ブロードバンド接続されたコンピュータは、Webサイト攻撃のための理想的な踏み台のため、攻撃の目標にされやすい - インターネットに接続している限り、クラッカーによってプローブ(探査ツール)を用いて無防備なコンピュータを探される対象となる ## 実践 Windowsファイアウォールは自身のコンピュータから接続要求が発せられたトラフィックに対する戻り方向のトラフィックを除いた外部からの通信をブロックするという方法を採用している ただし、「トロイの木馬」からは保護することができので、それによって自身が攻撃者の責任をとらされることにもなりかねない 下記でWindows8におけるWindowsファイアウォールの適切な設定方法について解説する ### 確認方法 まず、ファイアウォールの動作確認を行いましょう 「コントロールパネル → システムとセキュリティ → Windows ファイアウォール」で「Windowsファイアウォールの状態」が有効になっていればファイアウォールが動作しています 無効になっている場合は左側ペインの「Windowsファイアウォールの有効化または無効化」から設定を行ってください #### ファイアウォールのバイパス許可をプラグラムに与える 任意のプログラムが外部からデータを受け取る場合、通信がファイアウォールでブロックされてしまうことがあります 外部からデータを受け取りたい場合は下記の設定を行いましょう 1. 「コントロールパネル → システムとセキュリティ → Windowsファイアウォールによるアプリケーションの許可」を開く 1. 「設定の変更」を押して外部からデータを受け取りたいプログラムにチェックを入れて「OK」を押す また、特定のユーザーだけに許可を与えたい場合は下記の「スコープの変更」を行います 1. 「Windowsファイアウォール」の画面で「詳細設定」をクリックする 1. 表示された画面の左側のメニューから「受信の規則」をクリックする 1. スコープを変更したいサービスを右クリックし「プロパティ」を選択する 1. 「スコープ」タブをクリックし、許可するIPアドレスを設定する 上記の設定によって、許可されたIPアドレスのみ通信が行えます #### ログからWindowsファイアウォールの動作状況を追跡 下記のようにWindowsファイアウォールのログの設定を行うことで、どのような攻撃を受けて、Windowsファイアウォールがどのように撃退したのかを知ることができます 1. 「Windowsファイアウォール」の画面で「詳細設定」をクリックする 1. 左のメニューから「ローカルコンピューター...」を選択 1. 「Windowsファイアウォールのプロパティ」を選択する 1. 「IPsecの設定」以外のタブには「ログ」の項目があるので、「カスタマイズ」ボタンを押すことによって確認、変更ができる 「.log」ファイルはメモ帳で開くか、「AWState」というログ解析プログラムを使うことによって閲覧することができます #### 電子メールとWindowsファイアウォールに関する問題 Windowsファイアウォールを有効にすることによって、電子メールの新着通知の妨げになる時があります OutLookは内部から外部へ新着確認を行うので、新着通知が妨げられることはありません ですが、RPC(リモートプロシージャコール)を使用していた場合は外部から内部に発信されるため遮断されてしまいます この場合は自分で新着確認を行う必要があります # HACK#46 オープンポートの閉鎖とプロトコルのブロック ## 概要 - Windowsではファイアウォールに頼らずに手動で解放ポートを閉鎖し、特定のプロトコルをブロックすることができる - 例えば、telnetのポート(23番)を開けたままにしておけば、他人からも自分のコンピュータを操作されてしまう危険性がある - ファイアウォールを使うと外部からの通信がかなり限定されてしまうのでファイアウォールを使いたくないといった場合に上記の対策が有効である ## 実践 Windows8において手動でポートの閉鎖と特定のプロトコルをブロックするには下記の画面で設定を行う 「コントロールパネル > システムとセキュリティ > Windowsファイアウォール > 詳細設定 > 受信規則または送信規則の新しい規則」 下記で規則設定の方法を解説する ### 確認方法 1. 「ポート」を選択して「次へ」ボタンをクリックする 1. プロトコル(TCP or UDP)、特定のローカルポートを選択後、閉鎖するポート番号を入力して「次へ」ボタンをクリックする 1. 「接続をブロックする」を選択して「次へ」ボタンをクリックする 1. ブロックするネットワークの場所をすべて選択して「次へ」ボタンをクリックする 1. 設定の説明を入力して「完了」ボタンをクリックする 規則の一覧に駐車禁止アイコンの規則が表示されていたら設定が完了しています ※リスン状態のポートはnetsta -anで確認できます # HACK#47 Windowsファイアウォールを置き換える ## 概要 - 「CORE FORCE」を用いてキーロガーなど内部に入りこんでしまったマルウェアの対策を行う<br> ※キーロガー:コンピュータへのキー入力を監視するもの - Windows XPのファイアウォールはサービスに対する攻撃を防ぐ面ではとても強力である - しかし、一旦内部に入り込んでしまうと無力になる ## 実践 「CORE FORCE」はOpenBSDのPFをWindowsに移植したもので、レジストリとファイルのアクセスモニターやアプリケーションバイナリのインテグリティチェック機能を備えている ※インテグリティチェック:システムの整合性チェック システムの振る舞いの追跡、制限が可能で、自在に設定できるなど柔軟性に富んでいる ### 確認方法 Windows XP、Windows 2000向けのツールなので、ここでの詳細な設定方法の解説は省略します # HACK#48 認証ゲートウェイの作成 ## 概要 - 認証ゲートウェイでユーザー認証に従って通信を制御する(許可されたユーザー以外は利用できないようにする) - ファイアウォール機能を持つゲートウェイの場合、特定のコンピュータや条件での通信の制御にとどまる - さらに細かな条件で通信を制御するために認証ゲートウェイを用いる ## 実践 OpenBSDでは、PFとauthpf(認証ゲートウェイ用ユーザーシェル)で認証ゲートウェイを実現できる authpfはユーザー名、IPアドレス、認証時刻、ログアウト時刻などの利用履歴を記録できる CentOSで認証ゲートウェイを実現する1つの方法として、Webベースでユーザー認証を行う「PacketFence」がある 「PacketFence」によって、どのユーザーがどこにアクセスできるのかや、いつアクセスできるのか、どのくらいの時間アクセスできるのかを管理できる また、異常なネットワークアクティビティの検出、脆弱性スキャンなどの機能もある 下記で「PacketFence」のインストールと使用方法を解説する ### 確認方法 最初に、環境を構築しましょう <pre> [ホスト1](PacketFenceサーバ) eth0 192.168.1.XXX (ブリッジネットワーク) eth1 10.0.0.3 (内部ネットワーク) [ゲスト1](クライアント) eth0 10.0.0.5 (内部ネットワーク) </pre> #### PacketFenceのインストール 1. まず、yumリポジトリの設定パッケージをインストールします <pre> rpm -ivh https://packetfence.org/downloads/PacketFence/RHEL6/x86_64/RPMS/packetfence-release-1.2-5.1.noarch.rpm </pre> 1. yumリポジトリが定義されると、PacketFenceをすべての依存関係のパッケージと共にインストールし、必要な外部サービス(データベースサーバ、DHCPサーバ、RADIUSサーバ)を以下をコマンドでインストールできます <pre> yum install -y --enablerepo=packetfence packetfence </pre> 1. インストールが完了すると、Webベースの設定インターフェースが自動的に開始されます<br>下記URLから管理画面にアクセスしましょう <pre> https://localhost:1443/configurator </pre> #### PacketFenceの設定 初めてPacketFenceの管理画面にアクセスすると、6ステップで初期設定が始まります 1. 使用構成の指定 PacketFenceサーバが、認証ネットワーク(内部ネットワーク)とインターネットに直列につながっているので、「Inline enforcement」にチェックを入れて「Continue」をクリックします 1. 使用するインターフェースの設定 PacketFenceサーバが持つ2つのインタフェースの各IPアドレス、どちらが認証ネットワークにつながれているかなどを指定します インライン構成の場合 <pre> [eth0] IP Address:192.168.1.XXX Netmask:255.255.255.0 Type:Inline DNS:<br> [eth1] IP Address:10.0.0.3 Netmask:255.255.255.0 Type:Management </pre> 設定が完了したら、「Continue」をクリックします 1. 利用するMySQLサーバの設定 まず、データベースのユーザ名とパスワードを入力して「Create database and tables」をクリックします さらにPacketFenceアカウント(管理画面にアクセスするときに必要なアカウント)のユーザ名とパスワードを入力して「Create user」をクリックします 最後に「Continue」をクリックしてMySQLサーバの設定を完了します 1. 構成に関する設定 ドメイン名やホスト名DHCPサーバなどを設定します 入力が完了したら、「Continue」をクリックします 1. Administratorアカウントの設定 PacketFenceのAdministratorアカウントを適当なユーザ名とパスワードで作成します ユーザ名とパスワードの入力が完了したら、「Continue」をクリックします 1. PacketFenceの起動 「Start PacketFence」をクリックしてPacketFenceを起動します 以上でPacketFenceの初期設定が完了です なお、ユーザがPacketFenceによる認証ネットワークに接続するには、あらかじめユーザアカウントを作成しておかなければなりません 「Configuration > Create」からユーザーアカウントを作成しましょう ユーザーアカウントが作成できたら、実際にゲスト1のWebブラウザでインターネット上のWebサイトにアクセスしてみましょう # HACK#49 外部との不要な通信の制限 ## 概要 - アウトバウンドトラフィックにフィルタを適用して外部との不要な通信を制限する<br> ※アウトバウンドトラフィック:内側のネットワークから外部のネットワークに出てゆく通信(⇔インバウンドトラフィック) - アウトバウンドトラフィックが制限されていないと、自身のコンピュータに不正侵入されたとき、外部のネットワークを攻撃する拠点にされてしまう可能性がある ## 実践 アウトバウンドの通信を制御するためには、「egressフィルタリング」を使用する ### egressフィルタリング - ネットワーク運用のポリシーを強化することが可能である - インバウンドと同様に提供したいサービスにのみ許可するルールを設定する<br> → ファイアウォールの内側にいるユーザーには内部のサービスのみ利用させるのが理想 - IPスプーフィングの防止にも効果的である<br> ※IPスプーフィング:攻撃元を隠ぺいするために偽の送信元IPアドレスを持ったパケットを作成して送ること 下記でNetFilterにおける詳細な設定方法について解説する ### 確認方法 ここでは、外部のWebサーバーへのhttp要求を強制的に内部のWebサーバーにいくようにしてみます 1. 以下の環境を用意しましょう - ホストOS1 (ルータ役) - eth0 192.168.1.XXX (ブリッジネットワーク)eth0 - eth1 10.0.0.3 (内部ネットワーク)eth1 - ゲストOS1 (PC役) - eth0 10.0.0.5 (内部ネットワーク) - ホストOS2 (Webサーバー役) - eth0 192.168.1.XXX (ブリッジネットワーク) 1. ゲストOS1で以下のコマンドを実行しましょう - ping {ホストOS2のアドレス}<br>(pingが送信できないことを確認) 1. ホストOS1で以下のコマンドを実行しましょう - iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE<br>「送信元IPが10.0.0.0/24のネットワークに属しているならIPマスカレードを行う」<br>※IPマスカレード:IPアドレスの変換に合わせてポート番号も変換する 1. ゲストOS1で以下のコマンドを実行しましょう - ping {ホストOS2のアドレス}<br>(pingが送信できることを確認) 1. ホストOS2で以下のコマンドを実行する - /etc/init.d/httpd start<br>「Webサーバーを立ち上げる」 1. ゲストOS1でブラウザを立ち上げ、以下のURLを確認する - http://{ホストOS2のアドレス}<br>(ホストOS2のWebサーバーが立ち上がっていることを確認) - http://yahoo.co.jp<br>(http接続を要求した時に、yahooに繋がることを確認) 1. ホストOS1で以下のコマンドを実行する - iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT {ホストOS2のアドレス}<br>「eth1で受信したパケットがtcpプロトコルで宛先ポートが80(http)ならば、宛先IPアドレスをホストOS2のアドレスに書き換える」 1. ゲストOS1でブラウザを立ち上げ、以下のURLを確認する - http://{ホストOS2のアドレス} - http://www.yahoo.co.jp<br>(「www.yahoo.co.jp」にアクセスしようとしても、{ホストOS2のアドレス}のWebサーバーに繋がっていることを確認) これによって、外部へhttpの要求を出しても、内部のWebサーバー(ホストOS2)にリダイレクトされるようになりました<br>※httpsはポート番号が443なので対象外になっています ※googleの検索エンジンで検索する場合はTCPやUDPでないようなのでDnatでの宛先ポート変更が適用されません 今回はテストでhttpの要求のみを書き換えたましたが、DNSやメールなど様々なアウトバウンドトラフィックを制限できるので試してみましょう # HACK#50 ファイアウォールの検証 ## 概要 - 「FTester」を用いてファイアウォールが想定通りの動作をしているか検証する - ファイアウォールの設定が完了しただけでは本当に自分が意図したとおりに動作するが確信が持てない ## 実践 「FTester」はコスト、技術面的に難しかったファイアウォールのポリシーの動作確認を簡単にしている ### 「FTester」のスクリプト構成 「FTester」は3つのスクリプトから成る 1. ftestスクリプト<br>ftest.conf設定ファイルに定義された通りにカスタマイズしたパケットを送信する(送信したパケットはログに記録) 定義の形式  <pre> 発信元IPアドレス:発信元ポート:送信元IPアドレス:送信元ポート:フラグ:プロトコル:IPヘッダのToS(Type of Service)フィールドに設定する値<br> (ICMPパケットの場合)<br>発信元IPアドレス::送信元IPアドレス::ICMP:タイプ:コード<br> (テストが終了したことをftestdに伝えるパケット)<br>stop_signal=発信元IPアドレス:発信元ポート:送信元IPアドレス:送信元ポート:フラグ:プロトコル:IPヘッダのToS(Type of Service)フィールドに設定する値  </pre> ※フラグ:パケットにセットしたいTCPのフラグ(SYNはS、ACKはAなど) ※IPヘッダのToS(Type of Service)フィールドに設定する値:通信の優先度を決めるために使用されることがある stop_signalには必ずファイアウォールを通過できる組み合わせを定義する(テストが終了できない) 1. ftestdスクリプト<br>テスト中(スクリプト実行中)にftestから送信されたパケットをリスンする(受信したパケットはログに記録) 1. freportスクリプト<br>ftestとftestdのログを比較して検査の過程でファイアウォールを通過した(しなかった)パケットを確認する 下記で「FTester」によるファイアウォールの設定確認方法を解説する ### 確認方法 まず、以下の環境を用意しましょう - ホストOS1 (ルータ役) <pre> eth0 192.168.1.XXX (ブリッジネットワーク) eth1 10.0.1.3 (内部ネットワーク) </pre> - ゲストOS1 (送信役) <pre> eth0 10.0.1.5 (内部ネットワーク) </pre> - ホストOS2 (受信役) <pre> eth0 192.168.1.XXX (ブリッジネットワーク) </pre> #### ftesterを動かすためのperlモジュールのインストール (ゲストOS1, ホストOS2) 1. yum -y install libpcap libpcap-devel libyamal-devel gcc cpan<br>「perlモジュールをインストールするためのパッケージ」 1. 以下のコマンドを実行してperlモジュールをインストールしましょう - perl -MCPAN -e "install Net::RawIP" - perl -MCPAN -e "install Net::PcapUtils" - perl -MCPAN -e "install NetPacket" 1. 以下よりftesterをダウンロードして解凍しましょう (ホストOS1) - https://dev.inversepath.com/ftester/ftester-1.0.tar.gz - tar xf ftester-1.0.tar.gz #### ルータのパケットフィルタリング設定 1. 以下のコマンドでiptablesの設定を行いましょう <pre> iptables --flush (iptablesの初期化) iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE (IPマスカーレドの設定) iptables -A FORWARD -d 192.168.1.XXX -p tcp --dport 80 -j DROP (宛先192.168.1.XXXへのhttp要求を破棄) </pre> #### ftesterの設定 (ゲストOS1) 1. ゲストOS(送信役)のftesterの設定を行いましょう(不要な定義を削除して必要な定義を追記します) - vi ftest.conf <pre> #examples: # #192.168.22.3:1025:10.7.0.1:80:AS:TCP:0 (←コメントアウト) #192.168.22.3:1025:10.7.0.1:21:A:TCP:0 (←コメントアウト) ~~~~~~~~~~~~~~~~~~~~~(中略)~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #192.168.11.127:1025:192.168.11.128:80:S:TCP:0 (←コメントアウト) #192.168.11.127:1025:192.168.11.128:443:S:TCP:0 (←コメントアウト) 10.0.1.5:1025:192.168.1.XXX:80:S:TCP:0 (←追加) 10.0.1.5:1025:192.168.1.XXX:443:S:TCP:0 (←追加) </pre> <pre> #connect=192.168.0.1:1025:10.7.0.1:22:AP:TCP:0 (←コメントアウト) #connect=192.168.0.1-255:1025-2000:10.7.0.1:53:AP:TCP:0 (←コメントアウト) #connect=192.168.0.0/24:1025:10.7.0.1:1-1024:AP:TCP:0 (←コメントアウト) </pre> <pre> stop_signal=10.0.1.5:1026:192.168.1.XXX:22:S:TCP:0 (←修正) </pre> <pre> #ids=192.168.0.1:1025:10.7.0.1:25:S:TCP:0:VRFY (←コメントアウト) #ids=192.168.0.1::10.7.0.1:::ICMP:8:0:+++ath (←コメントアウト) #ids-conn=192.168.0.1:23:10.7.0.1:1025:PA:TCP:0:to su root (←コメントアウト) #ids-conn=192.168.0.1:1025:10.7.0.1:80:PA:TCP:0:cmd.exe (←コメントアウト) #ids-conn=192.168.0.1:1026:10.7.0.1:80:PA:TCP:0:ftp.exe (←コメントアウト) </pre> <pre> insert exploit.rules 10.0.1.5 192.168.1.XXX 0 (←修正) insert-conn exploit.rules 10.0.1.5 192.168.1.XXX 0 (←修正) </pre> #### ftesterの実行 ※以下の作業はftesterを解凍したフォルダ内で実行しましょう 1. ホストOS2(受信側)の実行 <pre> ./ftestd -i eth0 </pre> 1. ゲストOS1(送信側)の実行 <pre> ./ftest -f ftest.conf </pre> 1. 通信が完了したら、ゲストOS1(送信側)にあるログをホストOS2(受信側)に転送しましょう <pre> scp ftest.log root@192.168.1.XXX:/root/ftester-1.0 </pre> 1. ホストOS2(受信側)でログの解析を行いましょう <pre> ./freport ftest.log ftestd.log </pre> ログ解析のサンプル <pre> Authorized packets: (認証され、通過したパケット) ------------------- Modified packets (probably NAT): (NAT、IPマスカレードによって書き換えられたパケット) -------------------------------- 2 - 10.0.1.5:1025 > 192.168.11.128:443 S TCP 0 3 - 10.0.1.5:1026 > 192.168.11.128:22 S TCP 0 >>>>>>>> 2 - 192.168.11.113:1025 > 192.168.11.128:443 S TCP 0 3 - 192.168.11.113:1026 > 192.168.11.128:22 S TCP 0 Filtered or dropped packets: (パケットフィルタリングによって破棄されたパケット) ---------------------------- 1 - 10.0.1.5:1025 > 192.168.11.128:80 S TCP 0 </pre> これを参考にパケットフィルタリングがきちんと想定通りに設定されているかを確認しましょう # HACK#51 NetfilterによるMACフィルタリング ## 概要 - MACアドレスでフィルタリングできるようにファイアウォールの設定を行う - MACアドレスはユニークであることが保証されていて、それを用いたフィルタリングを行えば、さらに高いセキュリティのネットワークを構築できる ## 実践 MACフィルタリングを行うには、まず、対象となるインタフェースのMACアドレスを調査しなければならない コンソールが使用可能であれば、下記コマンドでMACアドレスを調査することができる <pre> ifconfig インタフェース名 </pre> コンソールが使用不可の場合はpingコマンドとarpコマンドを用いてMACアドレスを調査することができる <pre> ping -c 1 IPアドレス(-cオプションはパケット送受信の回数を指定するもの) /sbin/arp IPアドレス | awk '{print $3}'(arpコマンドでARPテーブルを取得して、そこからMACアドレスを取り出す)<br>※ARPテーブル:IPアドレスとMACアドレスの対照表 </pre> MACアドレスを知ることができたら、そのMACアドレスからの通信をフィルタリングするルールを設定する 下記で詳細なMACフィルタリングの方法を解説する ### 確認方法 192.168.1.30に対してMACアドレスフィルタリングを行うとしましょう まず、192.168.1.30との疎通を確認します <pre> ping -c 1 192.168.1.30 </pre> 疎通が確認できたら、192.168.1.30のMACアドレスを調査します <pre> /sbin/arp 192.168.1.30 | awk '{print $3}' XX:XX:XX:XX:XX:XX </pre> MACアドレスが取得できたら、ファイアウォールにMACフィルタリングのルールを設定します <pre> iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j (ACCEPT or DROP) </pre> -jオプションでパケットを通過させる場合はACCEPT、破棄する場合はDROPを指定します 以上で設定は完了です pingコマンドなどでファイアウォールに設定した通りの通信ができるかどうか確認しましょう # HACK#52 Torを止める ## 概要 - Torのディレクトリサーバーへのアクセスを禁止して、セキュリティ判定を迂回するのを防ぐ - Torはインターネットアクセスのプライバシーを守るという利点がある反面、攻撃元を隠ぺいするなど悪用される可能性もある ## 実践 Torは起動すると通信経路の迂回路を作成するのに使用可能なすべてのノードリストを取得する ノードリストの取得の際には、ディレクトリサーバの1つにアクセスする つまり、ディレクトリサーバにアクセスできなければノードリストを取得することができないので、Torが機能しない 下記でTorをディレクトリサーバにアクセスできなくする詳細な方法を解説する ### 確認方法 うまくいかないので、現在調査中です

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully