yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

GPKIよ、安らかに眠れ(タイトルで煽るスタイル)

はじめに

yumetodo.hateblo.jp

の記事を書いたyumetodoです。やっぱりGPKIよくわかってません(ぇ。

結論

自前認証局によるGPKIは安らかな眠りにつきそうです。

セコムトラストシステムズさん、あとは任せた。

2月のGPKI騒動は結局何だったか

上の記事を書いたのが2月のことです。

2018年3月1日木曜日 1時15分06秒 UTC+9 Elic Mill

So, to be clear, you would only revoke misissued certificates if required to do so by Mozilla -- not because they represent control failures, or in order to demonstrate to other root programs your CA's responsiveness and the seriousness with which you take control failures.

2018年3月1日木曜日 1時26分58秒 UTC+9 Wayne Thayer

My comment was intended to point out that you are violating BR section 4.9.1.1(9) by not revoking these certificates. My comments were not intended to imply that revoking these certificates would change Mozilla's decision to deny this inclusion request.

「へー、Mozillaに言われたから直すんだ。CAとしての責任を果たすためじゃなくて。」とか「BR違反しているから直してからおととい来やがれといったのであって、当該証明書を失効させたら受け入れるという話じゃない」などと、日本政府のGPKI Root証明書が木っ端微塵に粉砕されたのでした。

つまり、GPKIは日本政府がバックに付いているものの、世界から見放されるほどの 雑な運用で信用に値しないただのオレオレ証明書 に成り下がったわけです。

さらにGPKIの公開鍵を安全に入手する方法が官報を見るしかないというおそまつさ(Webページでも配っているが安全ではない)

お仲間であるLGPKIはどうなったか

LGPKIというものもあったわけですが、こいつは、自前の認証機関を持つのを諦めてセコムトラストシステムズに外注するようになりました。

[PDF注意]総合行政ネットワーク No. 185 1 第四次LGPKI移行の背景と その概要

四次LGPKIは、平成28年度に策定した第四次総合行政ネットワーク整備計画書において、外部認証局を活用することとしており、「地方公共団体組織認証基盤の構築及び運用業務」に係る調達の結果、認証局運営事業者をセコムトラストシステムズ(株)とすることに決定しました。

これまで、自前で運用していた現行LGPKIとは異なり、外部認証局のソリューションを活用して運用経費を低減しつつ、かつ、セキュリティは現状の水準を維持することを実現するとともに、利便性の向上を両立するため、第四次 LGPKIの構築を開始しました。

こっちは真っ当な路線になったな。

GPKIな証明書を利用していたWebサイトはどうなった

例えばCRYPTRECは

CRYPTREC | トップページ

GPKIはどうなるべきか

もう、自前認証局によるGPKIはどう考えても運用不可能で、安らかに眠る一択。

crt.sh

によれば、5月20日にLGPIK同様、セコムトラストシステムズに署名してもらったGPKIの鍵が出ているので、そういう方向に舵を切るんだろう。・・・て解釈でいいんですよね?

IIJ TechnicalNIGHT vol.5

ん、IIJ TechnicalNIGHT vol.5?なにそれ。

iijlive.ipcasting.jp

●セッション1 最近改訂されたSSL/TLS暗号設定ガイドラインを紐解く
(講演者)IIJ セキュリティ本部 セキュリティ情報統括室 須賀 祐治
(紹介文)
先月、CRYPTRECによるSSL/TLS暗号設定ガイドラインの改定が3年ぶりに行なわれました。
本セッションでは、このガイドラインを読み解くために必要となる知識や技術背景を易しく解説します。

これか。

SSL/TLS暗号設定ガイドラインというのは
CRYPTREC | CRYPTREC報告書
から飛べる

[PDF注意]SSL/TLS暗号設定ガイドライン - cryptrec-gl-3001-2.0.pdf

のことだろう。

聞きに行きたかったな・・・。

日本は法治国家ではなくなりました。警察が法です。|Coinhiveについて。

マイニングツールの設置を閲覧者に明示せずに設置した場合、犯罪になる可能性があります。また、マイニングツールが設置されたウェブサイトにアクセスすると、パソコンの動作が遅くなることがあります。ご注意ください。 http://www.npa.go.jp/cyber/policy/180614.html

ついに日本は法治国家ではなくなりました。

ここまでの流れ

  1. 各地の警察がなにかに取り憑かれたかのごとく[主観的な表現]一斉にCoinhiveの取締を始める。
  2. 見せしめのように[主観的な表現]家宅捜索を受けるなど少なくとも16人が摘発される。
    doocts.com www.sankei.com
  3. 警視庁のTwitter広報アカウントが後出しジャンケンマイニングツールの設置を閲覧者に明示せずに設置した場合犯罪になる可能性などと述べる。同時にWebページに文章。 www.npa.go.jp

警告もなにもないままいきなり摘発が始まり、その後に法的になんら決着しないままマイニングツール全般を潰しにかかる。

法律に基づかず書類送検だ家宅捜索することはもちろん憲法違反である。

Coinhiveが動いていてCPU使用率がたとえ100%になったとしてもPC動作は遅くならない

現在の戦況を俯瞰するに、今必要なことは、「Coinhiveが設定されたサイトを閲覧するとパソコンの動作が遅くなる」という大本営発表が(自分で試してもいない)虚偽だということを立証することだ。大勢の人で実験を行い、実際には重くならないことを証明しようす。

厳密に証明するのは難しいですが、とりあえずこの記事は

モロ氏をCoinhiveで支援しよう | Coinhiveクラウドファンディング

にてCoinhiveをCPU使用率90%に設定しながら執筆していてなんら操作に支障がないことを伝えておきたい。

CPU使用率と温度グラフ

そもそもある程度プログラミングをかじったことがあれば常識なこととして、PCの動作が重くなるのは

  1. モリーが不足していて、SSD/HDDにswapが発生している時(特にHDD)
  2. Disk I/Oが100%近くになっていて、かつSSD/HDDにswapが発生している時
  3. OSが対応していない(〜Windows XP)もしくはGPUの性能が著しく低いなどの理由で画面描画がGPUではなくCPUで行われているか、GPUで行われているがGPUの性能が著しく低いために処理が間に合わない

の3点が大きい。

例えばウィルスと錯覚するほど動作が重いことで知られ、本事案とも深い関わりが示唆されているトレンドマイクロ社のウィルスバスターを始めとするセキュリティソフトの類が動作するとPCの動作が重くなるのは大量のDisk I/Oが起きた時に限ってこいつらもリアルタイムスキャンなどの名目で大量のDisk I/Oを発生させるからだ。Windows 10標準のWindows Defenderもふくめこの点例外はない。

Windows UpdateなどのOSの更新やソフトウェアの更新の類、またOS起動時によく走るソフトウェア更新自動チェックの類も大量のDisk I/Oを発生させる。

一方、Choinhiveはメモリーを不足させたりDisk I/Oを発生させたりはしない。操作に支障がないのも当然である。。

森友・加計学園問題との比較

森友・加計学園問題: 公文書が書き換えられる

Coinhive問題: 警察が法になる

あきらかにこっちのほうがやばい。

高木先生の見解

まず

高木浩光@自宅の日記 - 懸念されていた濫用がついに始まった刑法19章の2「不正指令電磁的記録に関する罪」

を御覧ください。

つまりSystemdな環境の東京理科大学学生はいかにしてVPNに接続することができるのか

結論

まず、大学のマニュアルに従いanyconnect-tus-predeploy-linux-3.1.01065-k9.tar.gzを手に入れる(バージョンは違うかも)

$ tar zxvf anyconnect-tus-predeploy-linux-3.1.01065-k9.tar.gz
$ cd anyconnect-3.1.01065/vpn
$ sudo ./vpn_install.sh
$ sudo pacman -S pangox-compat networkmanager-openvpn networkmanager-openconnect

./vpn_install.shからエラーメッセージが出るが、SysVinit周りなので無視する。

/etc/systemd/systemvpnagentd.serviceという名前で

[Unit]
Description=vpnagentd
Requires=network.target

[Service]
Type=simple
ExecStart=/opt/cisco/annyconnect/bin/vpnagentd
ExecStop=/usr/bin/pkill vpnagentd
RemainAfterExit=yes

[Install]
WantedBy=graphical.target

を作成し

$ sudo systemctl daemon-reload
$ sudo systemctl enable vpnagentd.service
$ sudo systemctl start vpnagentd.service

以上。

背景

以前にこのブログで

yumetodo.hateblo.jp

という記事を書いた。東京理科大学の学生である私がいかにしてUbuntu 16.04から大学のVPNを利用できるようにしたのかという話だ。

先日@Akcuohbe氏のPCのセットアップを手伝っていた際にManjaro Linuxを入れたのだが、上の記事の手順がほぼそのまま適用できると考えていたがそうではなかった。悪戦苦闘しどうにかできるようになった。

知らなかったのだが、Ubuntu 16.04は確かにsystemdが利用できるが、昔ながらのSysVinitが生き残っているようだ。互換機能があるため上記記事を書いたときはCisco AnyconnectがSystemdに対応していると勘違いしていた。

大学のVPNアクセスに必要なCisco Anyconnectは(少なくとも大学が配っているバージョンのものは)SysVinitのみに対応していて、Systemdに対応していない。

Cisco Anyconnectにはvpnagentdというプログラムが有り、これがバックグラウンドで起動していることが重要らしい。

奮闘の内容

もう少しざっくりした話は

Archlinuxに東京理科大学のVPN接続するための道具を導入 - Qiita

を参照。

まだCisco AnyconnectがSystemdに対応していると勘違いしていたころ

TwitterのDMでやり取りしていた。

  1. インストールできないとの報告を受ける(GUI操作で/opt/cisco/anyconnect/bin/vpnuiを起動しようとして何も起きない動画を添付される)
  2. sudo pacman -S networkmanager-openconnectすることと、端末から/opt/cisco/anyconnect/bin/vpnuiを起動することを要請
  3. pacmanのことは華麗にスルーされ、端末から/opt/cisco/anyconnect/bin/vpnuiを起動したときに

    /opt/cisco/anyconnect/bin/vpnui: error while loading shared libraries: libpangox-1.0.so.0: cannot open shared object file: no such file or directory

    と言われた

  4. sudo pacman -S pangox-compatすることを要請
  5. 今度は端末から/opt/cisco/anyconnect/bin/vpnuiを起動したときに何も言わずに死ぬように
  6. yaourt -S lib32-pangox-compatすることを要請
  7. これを華麗にスルー
  8. 再起動してsudo systemctl status vpnagentd.serviceすることを要請
  9. ところが

    Unit vpnagentd.service could not be found.

    と言われる

  10. おかしい。オフトンに居たのでSystemdのサービス列挙方法調べてその中にそれっぽいの居ないか試すように要請して寝る
  11. 起きてみたらどうしたらいいかわからなかったらしい。
原因究明

埒が明かないので実際にあって操作することに。

/opt/cisco/anyconnect/bin/vpnuiを起動しようとすると確かに一瞬だけGUIが出て即座に死ぬこと確認。

  1. networkmanager-openvpn, networkmanager-openconnectpacmanから入れてみるもだめ。
  2. networkmanager-openvpn-gtk2をyaourtから入れようとしてみる
    1. gpg署名検証エラーで怒られる
    2. gpgコマンドから--serch-keysで出てくるのに--recv-keysできない問題に当たる
    3. 仕方ないので公開鍵を手動で取ってきてpacman-key --addする
    4. yaourtでビルドが通ったが、インストールフェーズでnetworkmanager-openvpnと競合するとの通知がきて取りやめ
  3. ls /opt/cisco/anyconnect/binしたときにvpn, vpnui, vpnagentdがいた。
    1. /opt/cisco/anyconnect/bin/vpnをターミナルから立ち上げると、メッセージをメモし忘れたがエージェントが居ないとか云々言われた気がする。
    2. あれ、これvpnagentdが立ち上がってない・・・?
    3. vpnagentdを立ち上げてからvpnコマンド立ち上げたらそのメッセージが消えた
    4. これだっ!自動起動の設定がコケてたんだ!
systemdのserviceを書こう

Ubuntu16.04でマウスのホイールの回転量を調整する - QiitaでSystemdのサービスを書いたことがあったのでこれを参考に書き進める

  1. Fedora Quick Docs | Fedora Quick Docs | Understanding and administering Systemd#creating-new-systemd-servicesのサンプルのExecStart=/usr/bin/sleep infinityに騙されてExecStart=/opt/cisco/anyconnect/bin/vpnagentd infinityとしてしまう(節子、それsleepコマンドの引数や!)
  2. Systemd入門(4) - serviceタイプUnitの設定ファイル - めもめもを見てWants+AfterじゃなくてRequiresを使うように: 少なくともサービスが立ち上がるようにはなったがvpnagentdが立ち上がらない
  3. なんかしばらくするとサービス落ちる問題
  4. ユーザーサービスにしたらうまくいくのでは?: システムサービスじゃないとioctlがコケる
  5. ようやくserviceのタイムアウトのせい?と気がつく: [Service]>RemainAfterExit=yesが必要だった
  6. うまく行ったと思ったが、OS終了時にあきらかにこのサービスの終了待ちのタイムアウトが・・・
  7. ExecStopが必要
  8. 完全解決!