人々が信じていることとは違って、我々はこのラボでリバースエンジニアリングとマルウェアの分析だけを行っているのではない。それどころか、おそらくはコードを分析する人よりも書く人のほうが多くいる職場だ。当社では今まで、作業についてはほとんどブログで取り上げてこなかったが、これを変えたいと思っている。この取り組みを開始するために、当社のWindows保護コンポーネントの開発者たちの生活をちらっとお見せしたいと思う。

 我々は、ある変更作業をちょうど終えたところだ。当社のソフトウェアを実行しているWindows 10システムの起動時間に改良を加え、また選択したWindowsアプリケーションの開始時間に良い影響を与えるものだ。これら改良点はローエンドのシステムで特に顕著になる。これを行う過程で、RAMがわずか1 GBしかない32ビットWindows 10機で、当社のSAFE製品が快適に動作するようにこぎつけた。スペックを考えると悪くない。

Low-end tablet
SAFEはこのちっぽけな機器でなかなか快適に動く

 あらゆるコードやロジックの変更、当社のコンポーネントに加える機能のすべてが当社製品のパフォーマンスに影響を与える可能性がある。したがって膨大なパフォーマンステストを実施していることは言うまでもない。顧客にリリースする前に、すべてのデータベースのパフォーマンスを確認している。社内に24時間毎日稼働する大掛かりな自動パフォーマンステストシステムを保有している。これは当社の全製品の内部・ベータ・プロダクションのそれぞれのビルドに対し、Windowsのさまざまなバージョンで使われるものだ。また外部のアンチウィルス製品のテスト企業によって発表されるパフォーマンス結果の情報も綿密に追っている。

 当社では、数多くのシナリオの下でソフトウェアをプロファイルする時間を頻繁に確保している。シナリオは自社で定義したものもあれば、Windows Assessment Kitで規定されたものもある。我々はテストを実施し、可能な限りすべてのメトリクスを収集してから、Windows Performance AnalyzerやWindbgで出力データの調査を行う。時折このデータをすべて掘り下げることで、除去することで最適化可能なボトルネックに到達する。

Jose's performance testing setup.
最先端の分析技術 + 古風な電話機 == 成功

 当社の振る舞い分析エンジンDeepGuardでは、最近の最適化を相当数見ることができる。我々が適用した大きな変更の1つは、ハッシュ計算を扱うために使用するコードのリファクタリングだ。Intel VTuneを用いて、我々は既存のハッシュアルゴリズムを分析し、CPUパイプライン内で失速する部分を探した。発見に基づき、こうした計算を実行するアセンブリコードの再調整を行い、使用されるCPUサイクル数の大幅な削減につながった。以下のスクリーンショットで確認できるとおり、今回の変更により我々は相当なパフォーマンス向上をなんとか絞り出した。

CPU benchmarking tool
アセンブリコードを書きたいなら、この仕事は気に入るだろう

 パフォーマンスの向上は、当社が繰り返し追及していることだ。当社で常に取り組んでいる点を、以下に挙げる。

ホワイトリストの改良

 クラウド内を検索したり、スキャンエンジンにかけたり、クライアントサイドの分析コンポーネントを通じて実行したりする必要がなければ、どのファイルもユーザエクスペリエンスの向上につながる。アプリケーションの起動が早まったり、ファイル操作が早まったり、ブラウジング体験が向上したり、だ。

古く重複する検知の除去

 当社の検知の大半は合理的であり、数千のサンプルにヒットするように設計されている。当社で新たにより良く検知するように開発する際に、より古い検知が持つのと同じサンプルを新バージョンで捕捉するのを発見することがある。このような場合には、古い検知を削除することで、パフォーマンスの小さな改善が得られる。OSとソフトウェアは古い攻撃に対するパッチが当てられているので、マルウェア作者は犠牲者を感染させるための新たな方法を探らねばならない。最終的には絶滅するマルウェアもある。このような場合には、それに応じて検知を削除する。

バグの発見と修正

 バグのないコードは無い。いつも変わらず、バグを見つけては修正している。かつては捉えられなかったバクを特定する新たな方法を定期的に発見しており、顧客ベース全体でのクラッシュについてうまく可視化するシステムを保有している。時折、パフォーマンスに打撃を与えるようなバクを発見し、修正することがある。この瞬間はいつでもお祝いだ。

クリティカルパスの最適化

 スキャンするロジックは複雑で、年がら年中ロジックを変更して、顧客の問題を解決したり、新製品の機能をサポートしたり、OSに対する変更をサポートしたり、あるいは使用されない機能を外したりしている。ほぼ常にスキャンのロジックについて作業している。その間、効率化する方法を模索している。

 エンジニアリングの面でラボにて起こっていることの小さな断片を覗くのが興味深いものであったら良いのだが。

 では。
 Andy

 (訳注:アンケートフォームは原文の記事へ)