2018-08-01-01-セキュリティソフトに翻弄されっぱなし - project-enigma

2018-08-01-01-セキュリティソフトに翻弄されっぱなし

>> Site top >> weblog >> 月別アーカイブ >> 2018年08月のlog >> 2018-08-01-01-セキュリティソフトに翻弄されっぱなし

最終更新日付:2018/08/01 19:47:32


セキュリティソフトに翻弄されっぱなし

2018 年 08 月 01 日

現在の職場の貸与PCには、T 社のなんとかバスターというセキュリティソフトがインストールされている。これに結構翻弄されている、という話。

 

この契約で仕事を始めるにあたって、日常的に必需品となっているいくつかのプログラムを持ち込んで使わせてもらえるように交渉していた。Emacs エディタとか、SBCL とか、そういったものと、あとは自分で作成したものだ。自分で作ったものの中には、steam も含まれていた。

ところが、環境を整えて steam を起動させてみると動かない。起動直後にプロセスがお亡くなりになる。スタックダンプも出ない。Cygwin のバージョンが古いのかとか、色々調べてみたが結局デバッガで追うしかないことに。結果、コードレベルでは「オートセーブ機能」のためのスレッドを起動するところで何か問題がおきているらしいことがわかった。

とりあえずクラッシュしている箇所はわかったが、理由はまだわからない。次に見つけた手掛かりらしきものは、コールスタックにあった。クラッシュした時点のスタックトレースを見ると、セキュリティソフトの DLL を通過していたのだ。問題を切り分けるために小さなテストプログラムを作成し、「何もしない」スレッド ── C++ の std::thread ── を起動しただけでも、そのセキュリティソフトが入っている環境では問題事象が再現することが判明した。そしてそのセキュリティソフトが入っていない環境ではこの問題は発生しない。この時点でセキュリティソフトをクロと断定した。

しかし、問題が明らかになったとはいえ、解決はできなかった。それなりに大きな企業のセキュリティ部門が相手ではどうにもならない。結局、「スレッドを使わない」という方法で問題を回避するしかなかった。steam ではオートセーブ機能、およびデータ編集のために起動したエディタの終了監視のためにスレッドを使っていたが、その仕組みをそっくり残したまま、それに替わる方法として fork を使用したマルチプロセス化の仕組みを作成した。この2つの仕組みを、起動時オプションで切り分ける。スレッドを使わない場合、起動直後に制御プロセスを fork して、データ編集などが発生する度に制御プロセスに通知してそこからさらに監視プロセスを fork する‥‥‥みたいな感じだったと思う(実はあまり覚えていない)。苦労はしたがうまく動作してくれたので、それ以来職場ではこのマルチプロセス方式で steam を使用していた。ちなみに、std::thread にまつわる問題は色々なところで発生していたらしく、Cygwin のに含まれるユーティリティのいくつかはやはり動作しなかった。動作しないもののうち、個人的に一番痛いのは guile だった。

だが、これで話は終わらない。というか、ようやくここからが本題なのだ。最近、そのセキュリティプラットフォームのシステム移行があって、接続先のサーバを変更するようにという通達が回ってきていた。やってみると、クライアント内のセキュリティソフト自体も再インストールとなったようだった。しかし、それ以降、steam の起動がセキュリティソフトによって「脅威」認定されて強制終了をくらうという事態に。正直なところ頭に来た。どれだけ邪魔してくれるんだ、と。

しかし、セキュリティソフトのログを見ると、どうやら fork しているところを問題視しているような雰囲気。イチかバチかでスレッドを使うオプションで起動してみると‥‥‥なんと、動いた。セキュリティソフトのアップデートにより、スレッドの起動でプログラムをクラッシュさせる問題が解決されていたようだ。それならばと、Cygwin で動作していなかったいくつかのプログラムを動かしてみると、w3m も guile も動作するようになっているではないの。それはつまり、steam の guile 拡張を利用できるようになったということでもある。これはめでたい。

‥‥‥とまぁ、そんな感じで翻弄されている。しかし、結果的に fork を使用した仕組みは使わなくなってしまったものの、良い勉強になったと思っている。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : steam

 

 


Copyright(C) 2005-2018 project-enigma.
Generated by CL-PREFAB.