漏洩チェッカーの技術と開発体制のすべて

スタメンエンジニアの井本です。 漏洩チェッカーのWebアプリケーションをフルスタックに領域問わず開発しています。得意な領域はインフラ含むバックエンドです。

本記事では、先月2022年12月にリリースしたサービス、漏洩チェッカーについて、プロダクトと開発体制の紹介をします。

漏洩チェッカーについて

漏洩チェッカーは情報漏洩を未然に防ぐセキュリティ管理サービスです。

企業にとってセキュリティ事故の影響は甚大であり、近年、情報の漏洩事故の件数は年々、増加の傾向にあります。 情報資産に関するセキュリティ事故には、外部からのサイバー攻撃のほか、従業員などにより会社の内部で引き起こされる、不正行為や悪意のない不注意などによる情報漏洩があります。 漏洩チェッカーは後者、内部で引き起こされる情報漏洩を予防・検知するためのサービスです。

IT部門が存在しない企業においては、IT資産のリスク管理を始めるにしても、どこから始めれば良いのかが分からなかったり、またIT資産に優先順位をつけて部分的に管理を始めようとしても、世の中のほとんどのセキュリティツールは重厚なオールインワン形式のものしかなかったりと、費用面や工数面においても小さく始めることが難しい状況にあります。 漏洩チェッカーはモジュールと呼ばれる機能単位で構成されたサービスで、フォルダー操作の監視やUSBの脱着の検知などといった機能をユーザーが自由に組み合わせて利用することができます。 モジュールというコンセプトにより各企業の事情に合わせて、機能・コストを最適化したリスク管理を実施できます。 またクラウド型のサービスなので、保守・管理の負担を抑えられることも特徴です。

セキュリティ向上を目的としたツールの多くが、セキュリティやITのリテラシーが高いユーザーを前提としており、リスク管理の障壁となっています。 そこで漏洩チェッカーは、セキュリティやITを得意としていないユーザーでも簡単に利用できる、シンプルさを追求したサービスとして開発されています。 管理画面は、自社のセキュリティ管理状況を直感的に理解できるUIにデザインされています。 また監視対象の端末にインストールするエージェントアプリケーションは、煩雑さのない簡単なセットアップで動作を開始するようになっています。

技術について

技術スタック

漏洩チェッカーの技術スタックは下図の通りです。

漏洩チェッカーは大きく2つのアプリケーションで構成されています。 一つは監視対象のPCにインストールして情報を吸い上げるWindowsデスクトップアプリケーション、もう一つは吸い上げた情報を集約・閲覧するWebアプリケーションです。

ログ収集アプリケーション

ログ収集用のWindowsアプリケーションは、.NET 6 による WPF(Windows Presentation Foundation) として実装され、MVVM フレームワークとして Prism を利用しています。

モジュールによって機能を組み合わせられる漏洩チェッカーのWindowsアプリケーションでは、Windows の各種情報にアクセスする必要があるため、新旧様々な API を利用することが特徴です。例えば USBドライブの接続状況についてはWMI(Windows Management Infrastructure) を利用し、Windows ごみ箱 の容量取得にはWin32 API の SHEmptyRecycleBin を利用しています。取得されたログはEntity Framework によってローカルPCに保存され、ネットワークがオンラインのタイミングでサーバーに送信されます。

また、機能追加が頻繁に行われることを想定し、MSIX でパッケージングし Microsoft Store で配布することで、アプリケーションの簡易インストールと自動更新 (サイレントアップデート)を実現しています。

ログ集約・閲覧アプリケーション

ログの保存・閲覧用のWebアプリケーションの開発には、バックエンドフレームワークとしてNest.js、フロントエンドフレームワークとしてNext.jsを使用しています。SPA構成となっており、フロントエンドとバックエンドの間のインターフェースにはGraphQLを採用しました。 クラウドはAWSをメインとし、一部基盤としてGCPやその他SaaSを利用しています。AWSの開発・管理にはAWS CDK in TypeScriptを使用しています。

漏洩チェッカー開発チームは、ユーザーに最速で価値を届けるために、職能や言語にとらわれない開発体制を目指しています。 そこで、言語の違いによるハードルをなくすため、フロントエンドからインフラまでフルTypeScriptで開発できるようにしました。

アーキテクチャ

漏洩チェッカーのアーキテクチャの概要は以下になります。

アーキテクチャは構成アプリケーションと同様に、大きく2つに分けることができます。 一つは、顧客企業の社員のPCの状態を監視し、操作ログなどの情報を吸い上げ、それを弊社ストレージに蓄積するログ収集アーキテクチャです。 もう一つは、蓄積したログ情報を管理者が閲覧・検索する管理画面アーキテクチャです。

ログ収集アーキテクチャ

顧客企業の社員のPC上では監視エージェントとしてWindowsデスクトップアプリケーションが稼働しており、ユーザーの操作やスケジューラをトリガーとして情報を収集します 収集データは一定量ごとにAWS上に構築されたログ収集エンドポイントに送信されます。 受信したログはAWS Lambda経由で一度Amazon SQSにキューイングされ、さらに後段に位置するログ処理サーバーが、Amazon SQSに対してポーリングすることで順に処理されます。 ログ処理サーバーはAmazon ECS(Fargate)にコンテナとしてデプロイされており、ログ種別ごとの仕分けの他、監視対象ユーザーの不審な行動ログを検知してアラートを発報します。 キューイングにより、ログ受信とログ処理を非同期に実行することで、監視対象のPCの負荷の上昇や処理サーバーの負荷変動を抑制しています。 ログはAmazon S3に蓄積され、監視対象のPCのオンライン状態やアラートなどの情報はAmazon RDSに保存されます。

管理画面アーキテクチャ

主に顧客企業の管理者が利用する管理画面アプリケーションのためのアーキテクチャです。 こちらは先程のログ収集アーキテクチャと比較して、シンプルな構成です。 Webアプリケーション自体は前述の通り、SPA構成となっており、フロントエンドはNext.jsと相性の良いVercelに、バックエンドはAmazon ECS上にデプロイされています。 Amazon S3上のログデータはAWS Glueを用いてテーブル定義されており、WebアプリケーションからはAmazon Athenaを経由することで検索・取得が行われます。

また、漏洩チェッカーはマルチテナント方式のサービスです。 マルチテナントは同じDBやサーバーを複数のユーザー(企業など)が共用する方式を指し、サービステナント同士のデータ分離が必須です。 データベースにPostgreSQL互換のAmazon Auroraを採用し、PostgreSQLのRLS(Row Level Security)を活用することでテナント分離を行っています。 アプリケーションレイヤーではなく、より低レイヤーの機能によってテナント分離を実現することで、テナントIDによる絞り込みのwhere条件を書き忘れる、といった情報の漏洩リスクを低減することができます。

その他

認証機能や決済機能など、プロダクトのコアバリューではないが、事業上クリティカルなシステムについては、SaaSを利用することで、開発・運用コストの低減および品質の向上に努めています。 またCI/CDパイプラインとして、CircleCIにおけるテスト実行後、AWS上でコンテナビルド〜各種ECSタスクの更新といった一連の処理を自動化しています。

組織について

組織体制

次のような体制で開発しています。

  • 管理画面などWebアプリケーション全般の開発 2名
  • Windowsアプリケーションの開発 1名
  • デザイナー 1名

Webアプリケーションの開発担当者は、フルスタックに開発することでフロントエンドやバックエンドといった職能に左右されず、事業上の優先度に従って次の開発アイテムを選ぶことが可能です。

またマーケ・営業担当のメンバー1名を含めた事業推進チーム全体としても5名の少数精鋭であり、ビジネスサイドのメンバーと密にコミュニケーションを取りながら事業を進めています。

開発体制

1チームのスクラム体制で開発をしています。

日々の進捗共有の場であるデイリースクラムには、ビジネスサイドのメンバーも参加しており日々、共通のKPIと現在値を確認しています。 売り上げやユーザー数などを共通の目標値として追うことで、同じ危機感を持ち、同じ達成の喜びを共有することができます。 顧客の声を直に受けているメンバーから常にフィードバックを受けることにもなり、「本当に顧客にとって価値に繋がるのか」常に向き合い続けています。 漏洩チェッカー事業に関わることで得られる、少数精鋭チームゆえの貴重な経験の一つになっています。

まとめ

漏洩チェッカーは、管理対象のPCにインストールされた.NET製のWindowsアプリケーションによって、ログ情報を収集しています。 収集したログはAWS上のストレージに集約され、SPA構成のWebアプリケーションで閲覧が可能です。 このWebアプリケーションは、ユーザーへの価値提供のスピード向上のために、フルTypeScript&スクラム体制で開発を進めています。

弊社スタメンでは、今後さらに加速してユーザーに価値提供するために、共に漏洩チェッカーの開発に携わる仲間を募集しています。 漏洩チェッカーの技術スタックや開発体制に興味を持っていただけましたら、ぜひ下記のページから採用エントリーいただけると幸いです。