業務ネットワーク構築を疑似体験してきた(IPAワークショップ)
2018年12月26日にセキュリティキャンプ参加生向けのIPAワークショップがあったので行ってきました。
講師:金子 正人さん(IPAセキュリティ・キャンプグループ)
SEIL/x86で業務ネットワーク構築を疑似体験しながらIPsecの通信の仕組みを理解していきます。
SEIL/x86 とは
x86アーキテクチャベースの高機能ソフトウェアルータです。私は正直よくわかりません。
なぜSEIL?かと言うと学生なら無償(アカデミックライセンス)で利用できるからです。
ネットワーク構築の勉強するとき中古のルータ買うなどが一般だったらしいです。
色々な機能が実装できます。
- PPP/PPPoE
- ルーティング (スタティック、ダイナミック、ポリシーベース)
- VLAN (IEEE802.1Q 対応)
- ブリッジ
- VRRP (ルータ冗長化プロトコル)
- VPN (IPsec、L2TPv3、PPTP、SSTP など)
- IP トンネル (IPv4 over IPv4、IPv4 over IPv6 など)
- NAT/NAPT
- DHCP/DHCPv6
- QoS ファイアウォール機能 (MAC アドレスフィルタ、IP フィルタ)
- ほか
ネットワーク構成
今回は以下のような構成のネットワークを作ります。 私は受講者1です。
物理構成
机の上に用意されたサーバーとPCを、構成図の通りにLANケーブルで配線します。
SEIL/x86の基本設定
挿したら使える家庭用ネットワーク機器と違って業務用ネットワーク機器は設定をする必要があります。
設定用のPCとネットワーク機器を「シリアルコンソールケーブル」を使ってシリアルポートに接続します。
Macならばドライバをインストールしたのち、screen /dev/tty.usbserial 38400
で接続します。
WindowsはTera Termを使っていました。
以下、SEILテクニカルマニュアル のコマンドリファレンスを参照しながら設定をしていきます。
show config
や show status
のコマンドを使うと設定を確認できます。
ホスト名の設定
机に配られたポカリから命名しました。
# hostname "POCARISWEAT"
ログインパスワードの設定
# password admin algorithm blowfish
インターフェースの設定
LANポートとIPアドレスを対応づけます。 受講者1なので以下のようになります。
# interface lan0 address 10.0.1.1/28 # interface lan1 address 192.168.1.1/24
これで受講者3のWANへ疎通できます。
スタティックルートの設定
続いて、LANへ疎通させます。
# route add 192.168.2.0/24 10.0.1.2 # route add 192.168.3.0/24 10.0.1.3
パケットキャプチャで通信内容確認
WiresharkでWANを流れるパケットをキャプチャしてみます。
これはIPsecを使う前なので通信内容が丸見えです。
IPsec
さあ、ここからが本番です。
IPsecで通信を暗号化して盗聴や改ざんに強い通信にしましょう。
まず、一旦設定をリセットします。
load-from stdin
で最小限のコンフィグをロードして、save-to flashrom
で内臓フラッシュメモリ(startup-config)に保存します。
IPsecとは
VPNで利用される主な技術のひとつです。プロトコルと言うよりもフレームワークのようなものであり、通信の枠組みを規定しています。 改ざん検知や暗号化ができます。
IPsec通信全体の流れ
1.IKE-SA
鍵情報を安全に運ぶためのトンネルを作るフェーズです。 以下の5つのパラメータをあらかじめ決めて通信相手と同じ設定にします。
- 暗号化アルゴリズム
- 認証アルゴリズム
- SA のライフタイム
- ピアの認証方式
- Diffie-Hellman鍵交換のパラメータ情報
2.IPsec-SA
IPsecでの暗号化通信を行うトンネルを作るフェーズです。 以下の5つのパラメータをあらかじめ決めて通信相手と同じ設定にします。
- セキュリティプロトコル
- 暗号化アルゴリズム
- 認証アルゴリズム
- SA のライフタイム
- IPsec の通信モード
3.実際のIPsec通信(暗号化通信)
IPsecの設定
ルーティングベースIPsec(IPsecインタフェース)の設定手順 を見ながらIPsecを設定しました。
入力したコマンドは以下の通りです。
IPsecインタフェースを設定
# interface ipsec0 tunnel 10.0.1.1 10.0.1.2 # interface ipsec0 unnumbered
IPsecインタフェース向けの経路を設定
# route add 192.168.2.0/24 ipsec0
IKEプロポーザル・IPsec-SAプロポーザルの設定
ここで、あらかじめ決めた5つのパラメータを設定します。
# ike proposal add IKEP02 encryption aes hash sha1 authentication preshared-key dh-group modp1024 lifetime-of-time 12h # ike preshared-key add "10.0.1.2" "pocarisweat" # ipsec security-association proposal add SAP02 pfs-group modp1024 authentication-algorithm hmac-sha1 encryption-algorithm aes lifetime-of-time 6h
IKEピアの設定
# ike peer add PEER02 address 10.0.1.2 exchange-mode main proposals IKEP02 my-identifier address peers-identifier address initial-contact enable tunnel-interface enable # ike auto-initiation enable
IPsec-SAを設定する
# ipsec security-association add SA02 tunnel-interface ipsec0 ike SAP02 esp enable
疎通確認
これでping 192.168.2.1
が通るはずです。
うまくいかなかったらshow status ike
や show status ipsec
で設定を確認します。
パケットキャプチャで通信内容確認
再び、WiresharkでWANを流れるパケットをキャプチャしてみます。
ESPとはIPsecに使われるプロトコルであり、暗号化されていて中身はわかりません。
感想
ネットワーク構築はハードルが高く感じていたので、今回のWSのようにやり方を懇切丁寧に教えてもらえたのはありがたいです。
セキュリティ・ミニキャンプ in 岡山 2018にチューターとして行ってきました
2018年11月16日(金)、17日(土)にあったセキュリティ・ミニキャンプ in 岡山 2018の報告をします。
一般講座
ここ数年のサイバー攻撃の動向変化の図解と得られた教訓 (講師: 名和 利男)
セキュリティ・ミニキャンプ in 岡山 2018 一般講座 最初の講義はサイバーディフェンス研究所 専務理事/上級分析官の名和 利男 氏による『ここ数年のサイバー攻撃の動向変化の図解と得られた教訓』です。昨今のサイバー攻撃の動向や、そこから得られた教訓が共有されています。 #seccamp pic.twitter.com/7cps7CGGEj
— セキュリティ・キャンプ (@security_camp) 2018年11月16日
最近のサイバー攻撃について、以下のような注意喚起をされていました。
- ARPスプーフィング等の中間者攻撃
ユーザーとWi-Fiルータの間を攻撃者のPCに割り込まれたら、通信内容を傍受・変更される。つまり、httpの平文通信はダメ。httpsで暗号化された通信をするべき。しかし、どことは言わないが、未だにhttpのままのサイトがある...。てかこのブログもそうじゃん...。
- 不正アプリ(特に中国、無料のもの)
中国製の無料で便利な機能が使えるアプリは怪しんで欲しい。ユーザーの情報を抜かれて中国に送信されたりする。
- タイポスクワッティング
Pythonパッケージのインストールは、コマンドラインでpip install (パッケージ名)
とするが、これの打ち間違えを狙って悪意のあるパッケージをインストールさせようとしてくる。例: Colourama(正しいのはColorama)
- サプライチェーン攻撃
サプライチェーン攻撃とは、ソフトウェアのソースコード等に不正コードを埋め込み、開発元は不正と気づかずにリリースしてしまうこと。上のColouramaや英国空港の顧客情報流出(2018年9月)など今後増加するものとして危険視される。
最後に、サイバー攻撃対処におけるこれからの組織について、
- 体制ではなく態勢をベースにする、すなわち政治支配の様式ではなく、前もって身構えをして本当に事態対処できるようにする
- 経営層がサイバー脅威による事業へのリスクに責任を持つ(サプライチェーンマネジメントするのは経営層)
- 経営層が状況認識能力を獲得・発揮する
べきであるとのことでした。サイバーセキュリティ担当に対処を丸投げしているのが現状です。
サイバー攻撃対応の基本 ~これだけはやって欲しいこと~(講師: 川口 洋)
セキュリティ・ミニキャンプ in 岡山 2018 一般講座 最後の講義はセキュリティ・キャンプ講師/株式会社川口設計の川口 洋 氏による『サイバー攻撃対応の基本 ~これだけはやって欲しいこと~』です。国内外の実際の事例を元にした、学生から社会人まで役に立つ講義となっています。 #seccamp pic.twitter.com/uBn0UJDs9d
— セキュリティ・キャンプ (@security_camp) 2018年11月16日
インシデントが発生した時に、ベンダーに全責任はあるのでしょうか。業務などの都合上対応してもらえない場合であっても、脆弱性があれば上の人に報告してください。いざ問題が発生したら、対応しなかった上の人の責任になるでしょう。また、大事なメールはCCではなくToで送るように心掛けます。
独自のドメインを取得するなら永続して取得しましょう。既存のドメインに相乗りするのが一般です。さもなければ、ドメインを手放したあと、残念なページに変わってしまいます。
パスワードの使い回しは厳禁です16億のIDとパスワードのリストが漏れています。職場とプライベートのパスワードは分けてください。パスワードの定期変更はやめていいですが、変えなくていいわけではありません。変えなきゃいけないとき(情報が漏れた、異動・退職)に変えるのです。パスワードの管理はパスワード管理ソフトを使用しましょう。紙に書く場合は財布に入れるとか、IDとパスワード分けるとか危機意識をしっかり持ちましょう。
バックアップとれていればランサムウェアの対策になります。個人利用では、クラウドストレージサービスの履歴機能を活用すれば復元できます。会社のバックアップは今本当にとれていますか?「バックアップ用テープが装填されていなかった。」なんてよくあります。今一度バックアッププログラムがエラーを吐いていないか確認してみてください。
ネットワークのセグメントを分割しましょう。人事部は送られてきたファイル開かなきゃいけない立場なので、他の部と同じにしていたら危険です。
システム管理のPCと個人用のPCを分離するようにしましょう。インターネットの閲覧をやめればリスクが圧倒的に下がります。
サイバー犯罪体験型コンテンツによるセミナー(講師: 岡山県警察本部生活安全部サイバー犯罪対策課員)
セキュリティ・ミニキャンプ in 岡山 2018 一般講座では、岡山県警察本部生活安全部サイバー犯罪対策課の方々より、『サイバー犯罪体験型コンテンツによるセミナー』が開催されています。サイバー犯罪被害を疑似体験することができる参加体験型のセミナーとなっています。 #seccamp pic.twitter.com/04YJ1rBFsf
— セキュリティ・キャンプ (@security_camp) 2018年11月16日
標的型メール攻撃が来るとどうなるのか、キーロガーでどのようにパスワード抜き取られるか、PCの内カメラに付箋を貼ってないとどういう危険に晒されるのか。攻撃者と被害者のPC画面を再現して、実際に何が行われるのかをわかりやすく表現していました。
専門講座
サイバー攻撃対応実践(講師: 川口 洋)
セキュリティ・ミニキャンプ in 岡山 2018 専門講座、午前の講義はセキュリティ・キャンプ講師/株式会社川口設計の川口 洋氏による『サイバー攻撃対応実践』です。 「ホームページ改ざんと対応」をテーマにし、サイバー攻撃が身近であることを体感します。 #seccamp pic.twitter.com/fhlF71bxGo
— セキュリティ・キャンプ (@security_camp) 2018年11月17日
20個のWebページが受講生に与えられ、それらのページが改ざんされているか否かを突き止めるという問題に取り組みました。
「全国大会を修了したチューターの皆さんなら全てできて当然ですよね!?」
と煽られながらチューターや見学者の方々も挑戦しました。
画像が差し替えられているという一目で分かるものから、問い合わせフォームを送信すると悪意のあるページに誘導されるなど様々な改ざんパターンがありました。
僕はwget
で全てのディレクトリを落としてdiff
で比較して満足していました。
しかし、残念ながら受講生でもチューターでも全ての改ざんを見つけることはできませんでした。Chromeでアクセスすると変化はありませんが、FirefoxやIEからアクセスするとドクロマークが表示されるようになっていたのです。.htaccess
ファイルでUser agent情報を使って制御しているというものでした。
サーバーにある普通はアクセスできないファイルなので見つからなかったのか...。
Webセキュリティ入門-攻撃者の狙いを先読みする(講師: 米内 貴志🤔)
セキュリティ・ミニキャンプ in 岡山 2018 午後の講義はセキュリティ・キャンプ修了生の米内 貴志氏による『Webセキュリティ入門-攻撃者の狙いを先読みする』です。「多層防御」「境界」をテーマに、演習を通してWebセキュリティについて学びます。 #seccamp pic.twitter.com/svFjQp41ix
— セキュリティ・キャンプ (@security_camp) 2018年11月17日
講義ではSOP(Same-Origin Policy)について説明があり、ブラウザでSOPをオン(通常)の時はCross-Originの情報にアクセスできないけれど、SOPをオフにするとCross-Originの情報を受け取れることを実際に体験しました。これで悪意のあるサイトが別のOriginのサイトの情報を呼び出そうとしても、できないということを学びました。
でもお天気APIのようにOriginが違うところから情報を得るのはどうすればいいか。そのためにCORS(Cross-Origin Resource Sharing)という仕組みがあり、Cross-Originで呼ばれることを許可することもできます。
ここで攻撃者の立場に立ってみると、SOPがあるために情報を盗めません。それをかいくぐるためにXSS(Cross-Site Scripting)を試みます...。 被害者は自身のOrigin(Same-Origin)ならアクセスできるので、Same-Origin内でスクリプトを実行させデータを攻撃者宛てに送信させるということです。 Cookieを送信させてしまえば、その中にあるセッションIDで成りすましが可能となります。 こうした一連の危険さを、XSSの脆弱性のあるサイトを見つけるところから手を動かして体感しました。
感想
サポートするだけの立場かと思っていましたでしたが、ミニキャンプをフルで楽しむことができました。
チューターとしては、受講生に分からせてあげられると「おお〜!」という反応があり、非常に教え甲斐がありました。
今後もこうしたセキュリティ関連のイベントに積極的に参加して行きたいです。
さくら公認クラウドマスターに認定されました
さくらのクラウド2万円分クーポンを頂いたことと、インフラの知識が乏しかったことをきっかけに サーバを作って動かしてみよう|teratail新年度応援企画 を読んでやってみました。
ただ、これで何を作ろうかと立ち止まってしまう。 何か目的があればいいんだけどそれが見つからないなあ。
DNSのセキュリティ問題を体験してきました(セキュリティ・キャンプWS)
前回に続いて2017年11月30日にセキュリティ・キャンプWS(ワークショップ)があったので行ってきた日記。
前回の記事はこちら souring.hatenablog.com
講師:金子 正人さん(IPAセキュリティ・キャンプグループ)
DNSのセキュリティ問題
- ゾーン転送の設定不備による情報流出
- DoS/DDoS 攻撃
- キャッシュ・ポイズニング攻撃
- 手法としてカミンスキー攻撃などがある
- 実装に対する脆弱性攻撃 ←今回体験する脆弱性はこちら
- ドメイン名ハイジャック
CVE-2015-5477の脆弱性
DNS サーバ BIND の脆弱性対策について(CVE-2015-5477):IPA 独立行政法人 情報処理推進機構
脆弱性:TKEYに関する問い合わせの処理内のエラーがREQUIRE検証エラーを引き起こし、namedを異常終了させることができる
つまりは一発で(復旧するまで)永続的なDoS攻撃ができてしまう...。しかも簡単なコードで。
可用性に全面的な被害を与え、誰でも容易に攻撃が可能などと言った点を踏まえてCVSSスコアが7.8(深刻度:重要)と位置付けられている。
今回はこのとっても危ない脆弱性をついた攻撃コードを作成しました。
CVE-2015-5477に対する攻撃コードの作成と実行
攻撃成立条件を満たすDNSメッセージ形式を調査
攻撃成立条件
DNSのセクションが以下の条件を満たしたクエリを送信すると攻撃が成功する。
- Headerセクション
- フラグは標準問い合わせ(RDは任意)
- Questionセクション
- リソースレコードタイプ : TKEY
- クラス : ANY
- Additionalセクション
- リソースレコードタイプ : A
- クラス : ANY
- TTL : 任意
- リソースレコード値 : 任意
これら3つのセクションの具体的な値をいくつにしたら良いかを仕様を見たり、実際のパケットを見たりして調べました。 自分は適当な標準問い合わせ(standard query)のパケットのバイナリをWiresharkで見て参考にし、それで本当に正しいかを仕様書で確認しました。しかし、Additionalセクションがあるパケットは通常ではなかなか観測できないので以下のdigコマンドを使って発生させました。
dig @127.0.0.1 www.google.com IN A
調べるのに使った仕様書たち
Domain Name System (DNS) Parameters
Information on RFC 1035 » RFC Editor
条件を満たす攻撃用DNSメッセージを作成し、送信
単純な問い合わせをするpythonのコードを書き換えて攻撃コードを作成しました。
攻撃条件を満たすコードを送ることができました。
このコードでクエリを送信しても、レスポンスが返って来なくなります。
それまでできていた通常の問い合わせをしても、いくら待っても返事が返ってくることはありませんでした......。(no server could be reached)
まとめ
攻撃者にとって
- コストが低い(一発)
- コードが簡単
- 同時並行で攻撃可能
運営者にとって
- 早急なパッチ対応とバージョンアップをする必要がある
- 通常のDNS問い合わせと区別しにくい
- キャッシュサーバと権威サーバの双方が対象で対策範囲が広い
感想
実装の不手際でここまで危険なことになるとは恐ろしい。こういう脆弱性はどうやって発見されるんだろう。
RailsでPostgreSQLが動作しない 解決方法
バージョン
SQLite3だとできていたのにPostgreSQLでdb:migrateしたらエラーが発生。
rails aborted! PG::ConnectionBad: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
解決方法
initdb /usr/local/var/postgres postgres -D /usr/local/var/postgres
postgresを起動させていないだけだった。
しかし
Caused by: PG::ConnectionBad: FATAL: database "myapp_development" does not exist
となった。データベースを作成する必要がある。
rake db:create rake db:migrate
うまく動作した。
sqlite3だとこんなことしなくてよかったので気づかなかった。
DNSの通信を体験してきました(セキュリティ・キャンプ勉強会)
2017年10月31日にセキュリティ・キャンプ勉強会があったので行ってきた日記。
講師:金子 正人さん(IPAセキュリティ・キャンプグループ)
DNSについて
よく見るあの図(キャッシュサーバと権威サーバがイチャイチャしてるやつ)が登場。
- UDP通信でありコネクションレスだよ
- キャッシュサーバに再帰問い合わせ
- 権威サーバには反復問い合わせ
- 質問(名前、リソースレコードタイプ、クラス)が必須
- 名前とはドメイン名のこと(例:www.example.com)
- リソースレコードタイプ(例:A, CNAME, MX, NS, SOA, TXT)
- クラスは常にINクラス。インターネットが発達する前に必要かと思われた残骸。
- メッセージフォーマットのセクションは5つ(Headerなど)
ヘッダーやタイプなどの仕様はこちらを見ながら確認しました。
Domain Name System (DNS) Parameters
実際にやってみよう
ブラウジングしながらWiresharkでパケットを観察。フィルターは"udp port 53"。
Questionセクションの様子。3www8facebook3com0,0001,0001より、ドメイン名www.facebook.com、タイプA、クラスINとなっていることが確認できる。
1...000..0..0..1..1..と見えるのはHeaderセクションの様子。RD=1でキャッシュサーバに問い合わせてRCODE=0000と正しく受理されている。
ただし +norec (no recursive : 反復問い合わせ)でキャッシュサーバに問い合わせるとRD=0でRCODE=0101となりRefuseされた。
DNSはバイナリでリクエストを送るためtelnetとかできない。そのためコードを書く必要がある。
このあと、講師の方が書いたコードを使って好きなDNSリクエストを送って楽しんだ。なお、digではできない任意のリクエストも送れてしまうため、扱いには注意が必要である。
セキュリティについて
コネクションレスのUDPを使っているがidで返答を理解している。idは2^16通りしかないので全通り試して偽装できる。これがキャッシュポインズニングできてしまう原因である。
感想
ネットワークスペシャリスト試験の勉強でDNSがまあしょっちゅう出てくるので、そこで知っていたことと結びついて面白かった。あ、ここネスペでやったところだ!実際に手を動かすことでより深く知ることができたと思う。あとチューターの方がめちゃくちゃ詳しかった。頼りになりました。
続き