ビーコンの創出

なんか作ったり報告したり。

業務ネットワーク構築を疑似体験してきた(IPAワークショップ)

2018年12月26日にセキュリティキャンプ参加生向けのIPAワークショップがあったので行ってきました。

講師:金子 正人さん(IPAセキュリティ・キャンプグループ)

SEIL/x86で業務ネットワーク構築を疑似体験しながらIPsecの通信の仕組みを理解していきます。

SEIL/x86 とは

f:id:souring:20181226180515p:plain

x86アーキテクチャベースの高機能ソフトウェアルータです。私は正直よくわかりません。

なぜSEIL?かと言うと学生なら無償(アカデミックライセンス)で利用できるからです。

ネットワーク構築の勉強するとき中古のルータ買うなどが一般だったらしいです。

色々な機能が実装できます。

ネットワーク構成

今回は以下のような構成のネットワークを作ります。 私は受講者1です。

f:id:souring:20181226180205p:plain
ネットワーク構成図

物理構成

机の上に用意されたサーバーとPCを、構成図の通りにLANケーブルで配線します。

f:id:souring:20181226185730j:plain
配線構造

f:id:souring:20181226185740j:plain
リピータハブ

SEIL/x86の基本設定

挿したら使える家庭用ネットワーク機器と違って業務用ネットワーク機器は設定をする必要があります。

設定用のPCとネットワーク機器を「シリアルコンソールケーブル」を使ってシリアルポートに接続します。

Macならばドライバをインストールしたのち、screen /dev/tty.usbserial 38400で接続します。

WindowsはTera Termを使っていました。

以下、SEILテクニカルマニュアル のコマンドリファレンスを参照しながら設定をしていきます。

show configshow 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へ疎通できます。

f:id:souring:20181226191248p:plain
受講者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

f:id:souring:20181226192005p:plain
受講者3のLANへ疎通確認

パケットキャプチャで通信内容確認

WiresharkでWANを流れるパケットをキャプチャしてみます。

これはIPsecを使う前なので通信内容が丸見えです。

f:id:souring:20181227014410p:plain
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 ikeshow status ipsecで設定を確認します。

パケットキャプチャで通信内容確認

再び、WiresharkでWANを流れるパケットをキャプチャしてみます。

ESPとはIPsecに使われるプロトコルであり、暗号化されていて中身はわかりません

f:id:souring:20181227014456p:plain
WANを流れるパケットの様子(IPsecあり)

感想

ネットワーク構築はハードルが高く感じていたので、今回のWSのようにやり方を懇切丁寧に教えてもらえたのはありがたいです。

公衆Wi-Fi用のVPN構築したいと思っていたので、学んだことを活かせそう?

セキュリティ・ミニキャンプ in 岡山 2018にチューターとして行ってきました

2018年11月16日(金)、17日(土)にあったセキュリティ・ミニキャンプ in 岡山 2018の報告をします。

smc-okayama.com

一般講座

ここ数年のサイバー攻撃の動向変化の図解と得られた教訓 (講師: 名和 利男)

最近のサイバー攻撃について、以下のような注意喚起をされていました。

  • ARPスプーフィング等の中間者攻撃

ユーザーとWi-Fiルータの間を攻撃者のPCに割り込まれたら、通信内容を傍受・変更される。つまり、httpの平文通信はダメ。httpsで暗号化された通信をするべき。しかし、どことは言わないが、未だにhttpのままのサイトがある...。てかこのブログもそうじゃん...。

  • 不正アプリ(特に中国、無料のもの)

中国製の無料で便利な機能が使えるアプリは怪しんで欲しい。ユーザーの情報を抜かれて中国に送信されたりする。

  • タイポスクワッティング

Pythonパッケージのインストールは、コマンドラインpip install (パッケージ名)とするが、これの打ち間違えを狙って悪意のあるパッケージをインストールさせようとしてくる。例: Colourama(正しいのはColorama)

サプライチェーン攻撃とは、ソフトウェアのソースコード等に不正コードを埋め込み、開発元は不正と気づかずにリリースしてしまうこと。上のColouramaや英国空港の顧客情報流出(2018年9月)など今後増加するものとして危険視される。

最後に、サイバー攻撃対処におけるこれからの組織について、

  • 体制ではなく態勢をベースにする、すなわち政治支配の様式ではなく、前もって身構えをして本当に事態対処できるようにする
  • 経営層がサイバー脅威による事業へのリスクに責任を持つ(サプライチェーンマネジメントするのは経営層)
  • 経営層が状況認識能力を獲得・発揮する

べきであるとのことでした。サイバーセキュリティ担当に対処を丸投げしているのが現状です。

サイバー攻撃対応の基本 ~これだけはやって欲しいこと~(講師: 川口 洋)

  • インシデントが発生した時に、ベンダーに全責任はあるのでしょうか。業務などの都合上対応してもらえない場合であっても、脆弱性があれば上の人に報告してください。いざ問題が発生したら、対応しなかった上の人の責任になるでしょう。また、大事なメールはCCではなくToで送るように心掛けます。

  • 独自のドメインを取得するなら永続して取得しましょう。既存のドメインに相乗りするのが一般です。さもなければ、ドメインを手放したあと、残念なページに変わってしまいます。

  • パスワードの使い回しは厳禁です16億のIDとパスワードのリストが漏れています。職場とプライベートのパスワードは分けてください。パスワードの定期変更はやめていいですが、変えなくていいわけではありません。変えなきゃいけないとき(情報が漏れた、異動・退職)に変えるのです。パスワードの管理はパスワード管理ソフトを使用しましょう。紙に書く場合は財布に入れるとか、IDとパスワード分けるとか危機意識をしっかり持ちましょう。

  • バックアップとれていればランサムウェアの対策になります。個人利用では、クラウドストレージサービスの履歴機能を活用すれば復元できます。会社のバックアップは今本当にとれていますか?「バックアップ用テープが装填されていなかった。」なんてよくあります。今一度バックアッププログラムがエラーを吐いていないか確認してみてください。

  • ネットワークのセグメントを分割しましょう。人事部は送られてきたファイル開かなきゃいけない立場なので、他の部と同じにしていたら危険です。

  • システム管理のPCと個人用のPCを分離するようにしましょう。インターネットの閲覧をやめればリスクが圧倒的に下がります。

サイバー犯罪体験型コンテンツによるセミナー(講師: 岡山県警察本部生活安全部サイバー犯罪対策課員)

標的型メール攻撃が来るとどうなるのか、キーロガーでどのようにパスワード抜き取られるか、PCの内カメラに付箋を貼ってないとどういう危険に晒されるのか。攻撃者と被害者のPC画面を再現して、実際に何が行われるのかをわかりやすく表現していました。

専門講座

サイバー攻撃対応実践(講師: 川口 洋)

20個のWebページが受講生に与えられ、それらのページが改ざんされているか否かを突き止めるという問題に取り組みました。

「全国大会を修了したチューターの皆さんなら全てできて当然ですよね!?」

と煽られながらチューターや見学者の方々も挑戦しました。

画像が差し替えられているという一目で分かるものから、問い合わせフォームを送信すると悪意のあるページに誘導されるなど様々な改ざんパターンがありました。 僕はwgetで全てのディレクトリを落としてdiffで比較して満足していました。

しかし、残念ながら受講生でもチューターでも全ての改ざんを見つけることはできませんでした。Chromeでアクセスすると変化はありませんが、FirefoxIEからアクセスするとドクロマークが表示されるようになっていたのです。.htaccessファイルでUser agent情報を使って制御しているというものでした。

サーバーにある普通はアクセスできないファイルなので見つからなかったのか...。

Webセキュリティ入門-攻撃者の狙いを先読みする(講師: 米内 貴志🤔)

講義では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脆弱性のあるサイトを見つけるところから手を動かして体感しました。

感想

サポートするだけの立場かと思っていましたでしたが、ミニキャンプをフルで楽しむことができました。

チューターとしては、受講生に分からせてあげられると「おお〜!」という反応があり、非常に教え甲斐がありました。

今後もこうしたセキュリティ関連のイベントに積極的に参加して行きたいです。

さくら公認クラウドマスターに認定されました

teratail.com

さくらのクラウド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

調べるのに使った仕様書たち

Chapter 15 DNS Messages

Domain Name System (DNS) Parameters

Information on RFC 1035 » RFC Editor

条件を満たす攻撃用DNSメッセージを作成し、送信

単純な問い合わせをするpythonのコードを書き換えて攻撃コードを作成しました。

f:id:souring:20171130234654p:plain 攻撃条件を満たすコードを送ることができました。

f:id:souring:20171130234700p:plain このコードでクエリを送信しても、レスポンスが返って来なくなります。

それまでできていた通常の問い合わせをしても、いくら待っても返事が返ってくることはありませんでした......。(no server could be reached)

まとめ

攻撃者にとって

  • コストが低い(一発)
  • コードが簡単
  • 同時並行で攻撃可能

運営者にとって

  • 早急なパッチ対応とバージョンアップをする必要がある
  • 通常のDNS問い合わせと区別しにくい
  • キャッシュサーバと権威サーバの双方が対象で対策範囲が広い

感想

実装の不手際でここまで危険なことになるとは恐ろしい。こういう脆弱性はどうやって発見されるんだろう。

HerokuとRailsでundefined method 'image_will_change!'になる 解決方法

バージョン

Rails 5.1.4
ruby 2.4.0


テスト環境だと普通に画像をアップロードできていたのにHerokuでしたらエラーが発生。

ログで確認してみる。

$ heroku logs -t 

恐らくこれがエラー内容。

NoMethodError (undefined method `image_will_change!' for #<Foo:0x00000003afdc70>
解決方法
$ heroku restart

rmagick等のbundle installが反映されていなかった。

RailsでPostgreSQLが動作しない 解決方法

バージョン

Rails 5.1.4
ruby 2.4.0


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など)

ヘッダーやタイプなどの仕様はこちらを見ながら確認しました。

Chapter 15 DNS Messages

Domain Name System (DNS) Parameters

 

実際にやってみよう

ブラウジングしながらWiresharkでパケットを観察。フィルターは"udp port 53"。

 

f:id:souring:20171101000322p:plain

Questionセクションの様子。3www8facebook3com0,0001,0001より、ドメイン名www.facebook.com、タイプA、クラスINとなっていることが確認できる。

 

digでDNSリクエストを送ることもできる。

f:id:souring:20171101000446p:plain

1...000..0..0..1..1..と見えるのはHeaderセクションの様子。RD=1でキャッシュサーバに問い合わせてRCODE=0000と正しく受理されている。

 

f:id:souring:20171101000558p:plain

ただし +norec (no recursive : 反復問い合わせ)でキャッシュサーバに問い合わせるとRD=0でRCODE=0101となりRefuseされた。

 

DNSはバイナリでリクエストを送るためtelnetとかできない。そのためコードを書く必要がある。

このあと、講師の方が書いたコードを使って好きなDNSリクエストを送って楽しんだ。なお、digではできない任意のリクエストも送れてしまうため、扱いには注意が必要である。

 

セキュリティについて

コネクションレスUDPを使っているがidで返答を理解している。idは2^16通りしかないので全通り試して偽装できる。これがキャッシュポインズニングできてしまう原因である。

 

感想

ネットワークスペシャリスト試験の勉強でDNSがまあしょっちゅう出てくるので、そこで知っていたことと結びついて面白かった。あ、ここネスペでやったところだ!実際に手を動かすことでより深く知ることができたと思う。あとチューターの方がめちゃくちゃ詳しかった。頼りになりました。

 

続き

souring.hatenablog.com