クライアント証明書での認証エラー

クライアント証明書でWebサーバへのアクセスに認証をかけていたが、ある日接続エラーが発生し、接続出来なくなった。

以下、エラー対応についてメモ。

エラー内容

 SSL_ERROR_CERTIFICATE_UNKNOWN_ALERT 
ERR_BAD_SSL_CLIENT_AUTH_CERT

原因

以下の期限をチェックした

  1. クライアント証明書

  2. クライアント証明書のCA証明書

  3. CRL

結果としてはCRLの期限が切れていた。

証明書の期限は10年にしていたが、CRLは30日担っていたため、今回のように突然エラーとなった。

対応

CRLを更新する。

openssl ca -config /path/to/openssl.cnf -gencrl -out /path/to/crl.pem

を実行してcrlを再生成する。(openssl.cnf内のCRLのdefault_crl_daysは書き換えておく)

更新したらapacheを再起動する。

CRLの期限のチェックは盲点だった。。。

CRLの期限切らたらアクセス出来なくなるっていうのも、なかなか強気な設定な気がしますが。。。。

サイバーセキュリティテスト完全ガイド用環境構築

「サイバーセキュリティテスト完全ガイド Kali Linuxによるペネトレーションテスト」を読むにあたって、Kali LinuxとMetasploitableのセットアップを行ったのでメモ。 (Metasploitableは本書ではほとんど触れられていないが、ペネトレーションテスト対象として準備した)

構築する環境はConoHaのVPSにした。

VPS上で作っておけばどの端末からでも使えるから便利そう。まぁ、勉強用にしか使う予定はないが。

ちなみに、イメージとして保存しておけば課金されない(ただし、3ヶ月で消えるので残したい場合は適度に使う必要がある)

Kali Linux

  • ConoHaへのKali Linuxのインストール

標準ではKali Linuxは準備されていないので、isoからインストールする必要がある。 (AWS?なにそれおいしいの?)

CLIツールで簡単にISOイメージをマウントする|VPSならConoHa を参考にisoの部分をKali Linuxに読み替えてVPSへインストールする。

インストールが終わったら、

apt-get update
apt-get dist-upgrade

を実行する。ネットワークの問題かもしれないが、完了まで1時間位かかった。

ここまで実行したら、とりあえずイメージとして保存しておく。

ちなみに、Metasploitableのインストールまで含めると、25.7GBのサイズになった。

イメージの保存枠は50GBまでしかないので、1世代しか保存できないのがちょっっと惜しい。

  • Metasploitable(KVM)のインストール

MetasploitableはKali Linux上のVMとして構築する。

今回は、Kali LinuxVPS上に構築しているので、MetasploitableもVPSにするかKali Linux上に構築するかが構成としては簡単だが、 MetasploitableはVMファイルとしてしか提供されていないため、単独でインストール出来るかが不明のため、後者の方法を取る。

なお、ConoHaのハイパーバイザの兼ね合いと思うが、KVM出ないとKali Linux上でハイパーバイザがうまく動作しなかった。 (VMwareやVirtual boxが動かないのも当然といえば当然?)

また、MetasploitableはVMDKファイルとして提供されているので、KVM用に変換する必要がある。

どちらも大した手間ではないが、以下のサイトを参考にした。

VMware のディスクイメージ (VMDK) を KVM (qemu) で使えるように変換する - Kenichi Maehashi's Blog

KaliLinux 2017.1: 仮想化のKVMをインストールする - Narrow Escape

windows

windowsでもペンテスト出来るようにしたほうがいいと記載してあったので、windows serverでも環境構築する。

サーバのインストール自体は標準で出来るので、Metasploitをインストールしたら終わり。

VMwareが動かなかったので、Hyper-Vで構築する。

作業としては、

  1. Hyper-Vのインストール

  2. VMDKをHyper-V用にコンバート

の2つである。

以下のサイトを参考にすれば、大した作業ではない。

Windows Server 2016 にHyper-Vをインストールする VMware の vmdk を Hyper-V の vhd(vhdx) に変換 - pudding - diary(2016-07-17)

なお、windowsのイメージサイズは26GBとなり、Kali Linuxと合わせると50GBを超えてしまうので、 Kali Linuxシンガポールリージョンに移動させた。

windows server 構築メモ(Remote App, Active Directory)

複数のデバイス使っているとブラウザで開いている内容を共有したくなるので、 windows serverのRemote Appを使えばいいんじゃないかと思った。

こんな感じ f:id:smitch:20180708151301p:plain

Remote Appだとブラウザのウィンドウだけ表示できるのでちょうどいい。

とゆうわけで、RemoteAppサーバを構築したのでメモ。

windows update

クリーンインストールwindowsから構築する場合はまずupdateする。

updateせずにactive directoryサーバをインストールすると再起動した時にブルースクリーンになった (自分の環境はVPSなので、環境によると思いますが)

どういうことかわからないけど、updateで解決したので間違いないと思う。

3回くらいupdate->再起動を繰り返す必要がある。

これにはまって、3回windows serverを再インストールした。。。

Active Directory構築

Remote Desktopサーバだけなら必要ないのにRemoteAppサーバの構築にはActive Directoryが必要になる。

役割と機能の追加からActive Directory機能を追加する。

今回はインターネットからアクセスするのでドメイン名を安易にexample.localとかに設定すると後々面倒になるので注意。

ad.example.comとか、自分の持っているドメインサブドメイン)に設定すること。

ドメインを取得していなくても使う方法もあるみたいだけど、今回は正当なやり方で設定する。

RemoteAppサーバ構築

こちらも役割と機能の追加からインストールする。

ウィザードにしたがってボタン押していけばOK

あとはRemoteAppで利用するアプリをコレクションに設定する。

この時点でサーバ上のブラウザからhttps://localhost/rdwebにアクセスしてRemoteAppが使えることを確認するといい。

dns record

ad.example.comでADのドメイン名を設定した場合は<host名>.ad.example.comのレコードを登録する。

これで外部からアクセス出来るようになる。

感想

Active Directoryが必要っていうのがちょっと手間ですね。。。

あとipadでアクセスするときはドメイン名¥ユーザ名よりもユーザ名@ドメイン名にするほうがいいです。 (¥って機種依存文字だからApple系で扱うと思いがけずハマったりする。。。)

RemoteAppって実質的にRemoteDesktopと変わらないというかスタートメニュー抜きのRemoteDesktopみたいな感じですね。

動作が軽いといいなと期待してたんだけど、正直あまり変わらないというか、むしろ余計な機能追加したせいでサーバが重くなってる感すらある。。。

VPSの最低プランを使っているから贅沢は言いませんが。

そして、ユーザの登録もADからじゃないと出来なくなるので、運用の手間も増えます。

あと、RemoteDesktopは出来ないが、RemoteAppは接続できるユーザ設定が出来るみたいなんですが、どうもうまく出来ませんでした。 (ログイン時のスクリプトとして、ログアウトコマンドを指定するってやつです。どちらもログアウトしてRemoteAppも出来なくなりました)

クライアントがwindowsだと違ったりするんですかね。

構築は出来たので使い道を探っていきたいなと思います。

情報処理安全確保支援士 平成30年春期 結果考察

無事に合格して、経済産業大臣から合格証書が届きました。

成績照会も出来たので、自分の解答や採点基準等について考察します。

成績

f:id:smitch:20180708100053p:plain

でした。 採点基準がわからないからドキドキしてたけど、9割弱得点出来たので模範的な解答でなくてもある程度得点できそうですね。

自分の解答

試験時のメモ書きを元に解答を再現しました。実際に答案に書いた内容と完全に一致してるかは自信がないけど概ね同じだと思います。(午前問題は選択式なので割愛)

  • 午後Ⅰ(問2、3を選択)

問2

設問1(1)x1.y1.z1.4 (2)b: 迷惑メール送信サーバ c: webメールサーバ d: 外部メールサーバ

設問2(1)インターネット上のドメイン名の名前解決を行う(19字) (2) ・メール送信の必要のない者がインターネットへメールを送信する(30字) ・メールアカウントに対応付けられていない送信者メールアドレスに詐称する(35字)

設問3(1)運用PC-LAN上のPCからのHTTP接続を拒否する(26字) (2)運用PCのIPアドレスからの各ベンダを除くプロキシサーバへの接続を拒否する(37字)

問3

設問1(1)a: ウ b: エ (2)c: ア d: ウ

設問2(1)ファイル転送サーバから研究開発PCへの通信は禁止されているから(32字) (2)e: 利用者ID f: パスワード g: アップロード用URL  方法:ファイル転送サーバ向けの通信の盗聴 (3)利用者が選択しなければダウンロードされず、アップロードしてから4時間経つとファイルが削除されるため(50字)

設問3 h: 高い i: 低い j: 感染活動を遮断できる機器がないため k: FW1によって感染活動を遮断できるから

設問4 パスワードの再入力

  • 午後Ⅱ(問2を選択)

問2

設問1(1)POSTリクエストによる攻撃 (2)webサイトYの全ファイルと比較 (3)公開鍵による認証

設問2 各webサイトのWF、プラットフォームに使用しているソフトウェアの名称及びバージョン(34字)

設問3 c: ディレクトリ d: クロスサイト e: HTTP f: ジャッキング

設問4(1)g: 30 h: 0 (2) イ (3)POSTデータのcodeに限定商品の値を設定して(う)の画面遷移を行う(35字) (4)k: アクセス制御や認可制御の対象 l: 許可された動作が行えること

設問5 レビューを記録に残し、報告書として提出すること(22字)

設問6 webセキュリティガイドの見直しを行う必要がないかを判断する用途で利用する(37字)

考察

  • 午後Ⅰ

問2はほぼ模範的な解答が出来ていました。 設問2はちょっと考える必要がありましたが、その他の設問はどこかで見たことある記述だった気がします。 メールやプロキシサーバの構成はきちんとおさえておきたいですね。

問3はいくつか微妙な解答をしてしまった。

まず、設問2(3)は回りくどい解答をしてしまいましたね。趣旨はずれていない気がするので多少点はついたんじゃないかな。

設問3は完全にチョンボです。iとjが逆だし、FW1とFW2も間違ってますね。こういうところ見直しの必要性を感じます。。。

設問4も完全にずれてました。IPAの講評にある「マルウェアが既にパスワードを窃取していることを読み取れていない」人とは自分のことです。

配点の推察としては穴埋め問題が1個2点程度で記述が5〜10点程度でしょうかね。何となくですが。

  • 午後Ⅱ

設問4,5,6が点数引かれてそうですね。

設問4のk, lは意図したいことがちゃんとした日本語になってない感じがします。

設問5は「作業の妥当性を確認できる」が必要かもしれません。

設問6は「見直し・レビュー」は押さえつつも、「脆弱性の作り込み原因を調査」が抜けていました。

配点としては、10~15点が満点の問題から5点ずつくらい引かれた感じがしますね。

総評

記述問題については完璧な解答というのは難しいと思いますが、模範解答から1点程度ポイントが欠けたくらいなら多少の点になるようです。

ベースとなる知識をもとに、記述解答をかけるようにすれば大丈夫な試験だと思います。

逆に穴埋め問題で求められた知識が足りないと解答進めるのが辛くなるので、案外用語を覚えておくのが大事です。

以上、何かの参考になれば幸いです。

VPNサーバ on windows server 2012 R2

windows serverでVPNサーバを構築した際のメモ。

iOS, android->windowsは苦労せずに接続できたが、CentOS->windowsは設定が厄介。 windows serverでのVPNサーバ構成自体はサーバーマネージャの役割と機能の追加から出来るし、記事も複数あるので割愛してはまったことだけメモしておく。

環境

VPNサーバ: windows server 2012 R2 VPNクライアント: iOS, android, CentOS7(libreswan)

はまったこと(すべてCentOS->windows

  • エラーメッセージのログ

CentOSIPSec関連のログって /var/log/pluto.logを指定していたからすべてここに出るかと思っていたら、 接続関係のエラーは/var/log/messageに出力されていた。 これに気づくまで、ログの出力少なすぎだと思っていた。 ログの出力ファイルの確認は大事。

  • no prosal chosen

使用可能な暗号方式がマッチせずにno proposal chosenになっていた。 暗号方式の調査はike-scanを用いて確認すればいい。

CentOS7ではyumでインストール出来ないためgithubからソースを入手する。

今回は一時的に使えればいいので./configureとmakeだけして、インストールはしなかった。

使い方

ike-scan <VPNサーバのIPアドレス>

コマンドの出力結果を元にipsecのコンフィグファイルに

        ike=3des-sha1;modp1024
        esp=3des-sha1;modp1024

を追加する。

なお、ipsecサービスが動いているとike-scanがポートを使用できないため、サービスの停止が必要。

  • libreswanとstrongswanは別物

調べているとstrongswanとかopenswanとかの記事が見つかって設定参考にしたりしたけど、 設定の記述方法が微妙に異なっているので動作しなかったり、変なログが出ている場合は 疑った方がいい。

例えば上記のikeやespの暗号化の指定はstringswanだと

        ike=3des-sha1-modp1024
        esp=3des-sha1-modp1024

になる(sha1とmodp1024の間が"-"になる)

  • refuse chap

IPSecがつながったと思ったら、chapがrefuseされてL2TPの接続が確立できなかった。

/etc/ppp以下のコンフィグファイルに

refuse-pap
refuse-eap
refuse-chap
refuse-mschap
require-mppe

を追記して解消。

感想

windows<->CentOSの接続をやってみると、IPSecの設定が難しいと言われるのが少しわかった気がする。 パラメータが多すぎて対向で合わせるのが大変なのでike-scanとかをうまく使う必要がある。 一方でandroidとかiOSはすんなりつながったので、簡易につながるのを意識して実装してるんですね。

情報処理安全確保支援士 受験メモ

資格の名称がセキュリティスペシャリストだった頃に受験準備だけはしていたが、今回ちゃんと受験をしたので勉強内容のまとめ。

教材

  • 情報処理安全確保支援士 合格教本

午前Ⅱ〜午後Ⅱまでに必要な用語や概念を広くカバーしているので、一読して確認をした。 暗号の種類や鍵長、EAPの種類などは午後試験でも問われることがあるので、暗記しておくといい。 ページ数は多いが、内容は平易なため過去問を解き始める前に読んでおくといいと思います。

また、付属のディスクに午前Ⅰ及びⅡがwindows PC上で解けるソフトが入っている。 年度ごとの得点管理や、分野ごとの正答率を出せるので、午前問題の得点を上げたい人にも向いています。 特に、午前Ⅰは範囲が広いので、分野ごとに分析が出来ると対策しやすい。

  • ポケットスタディ

午後試験の対策として使用。 本書の冒頭に記載の通り、午後Ⅰ、Ⅱの試験では設問に対してきちんと方針に沿った解答を書く必要があり、 その方針を型として身に付けるための本。

  • その他

規格とか最近のセキュリティ情勢とか勉強しておくにこしたことはないけれど、 余力があればって感じだと思います。 JISQ27002くらいは読んでおくといいかもしれませんね。

試験対策 午前Ⅰ

ひたすら過去問を解いて対策をした。 数年分すればだいたい解けるようになると思う。 範囲が広いので、手を広げ過ぎない程度に、知識が足りない分野を抑えておく勉強の仕方がいいと思います。 やり過ぎると勉強時間が足りなくなるので、コンスタントに7割取れるようになる程度で効率化するといい。

試験対策 午前Ⅱ

午後試験メインの勉強の仕方で、午前Ⅱは合格点取れていたので、これと言った対策はしていません。 教材を読みこめば解けると思います。

試験対策 午後Ⅰ

3問から2問を選ぶので、どの問題を解くかの選定がまず必要になる。 自分は、ざっと全部眺めて、得点できそうな問題を選んだ。 (知識的にはプログラミングよりもネットワーク系の方が得意) 解答の推敲も含めると1問30分はかかるので、時間配分もそこそこ気にしたほうがいい。

過去問とかポケットスタディをもとに、どういった方針で設問に回答すればいいかを考える。

試験対策 午後Ⅱ

試験の文章量が午後Ⅰよりも多いので、設問に対応する範囲だけを読んで答えるやり方がおすすめ。 また、解答の方針として考慮すべき事項が文章中にあったりするので、 読み飛ばしはせずに、文章の読解はきちんとしたほうがいい。

試験時間は2問中1問選択で2時間とたっぷりあるので、両方解答を考えて得点できそうな方を選択すればいい。

試験勉強時には、文章量が多く過去問解いて勉強するのも疲れるので、1日1問とかのペースで継続して勉強するのがいいと思います。

午後Ⅰ、Ⅱ共通のこととして、記述問題の得点基準や、全体の配点がわからないので、対策しにくいけれど、 きちんとした解答文を作るよう心掛けて、自分なりに考えてやっていくしかないのかなと思います。 推敲の練習も多少したほうが、試験本番で苦労しないと思う。

何となく、安全確保支援士に求められているのは、ある程度のセキュリティ知識と国語力じゃないのかという気がします。

emacsとzshで共有できるクリップボード(キルリング)もどきの自作

sshでサーバにつないでscreen上でzshとかemacs使っていると emacs<->zshとかscreen上のシェル間でkill, yank出来なくてもどかしい。

ホスト側でマウス操作するなりすればいいんだけど、 最近ipadからsshしてるからそれも面倒くさい。 x windowも動かしていないからxselも使えない。

screenにコピーペーストもあるんだけど、 コマンドでやりたいので自作することにする。

実装方針

kill ring用のファイルを用意し、そのファイルで共有することにする。

  1. ファイルに書き込む用の関数
  2. ファイルから読み込む用の関数 をemacszshでそれぞれ実装する。

関数名はshared-yankとshared-killとする。 ショートカットはshared-yankをESC-uとshared-killをESC-jにする。 emacsにしてもzshにしても大したキーバインドが割り当てられていないのでちょうどいい。

kill ring用のファイルは~/.tmp/shared_kill_ringとする。 個人用なので~以下でパーミッションは400推奨。

emacs

(defun shared-yank ()
  "yank from shared kill ring file"
  (interactive)
  (with-temp-buffer
    (insert-file-contents "~/.tmp/shared_kill_ring")
    (setq shared_kill_ring (read (buffer-string))))
  (insert-before-markers (format "%s" shared_kill_ring)))
(global-set-key "\M-u" 'shared-yank)

(defun shared-kill (beg end)
  "kill to shared kill ring file"
  (interactive "r")
  (if (and mark-active transient-mark-mode)
      (progn
        (setq temp (buffer-substring beg end))
        (with-temp-buffer
          (insert (format "%s" temp))
          (write-file "~/.tmp/shared_kill_ring")))))
(global-set-key "\M-j" 'shared-kill)

zsh

function shared-kill(){
  echo $RBUFFER > ~/.tmp/shared_kill_ring; RBUFFER=""
}
function shared-yank(){
  LBUFFER=$LBUFFER"`cat ~/.tmp/shared_kill_ring`";
}
zle -N shared-kill
zle -N shared-yank
bindkey '^[j' shared-kill
bindkey '^[u' shared-yank

最後に

ringと書いているが、あれは嘘だ。 あと、killの方はzshemacsで挙動が違います。 (emacsの方はcopy-regionの挙動)