過去のSaaS企業から学んだこと
典型的なSaaSスタートアップでは、開発チームは新機能を提供しなければならないという重圧にさらされている。通常、資金力のある競合他社が存在し、営業チームは契約をまとめるために最後の機能を要求し、カスタマーサポートチームはバグ修正を要求する。大企業の顧客から要求されるか、役員会から押し付けられない限り、セキュリティを優先するのは難しいかもしれない。
たいていのスタートアップ企業では、自由に使える技術者のプロフィールをすべて揃えているわけではないかもしれない。専任のプロダクトマネージャーがまだいないかもしれないし、開発チームに専任のセキュリティ責任者がいるわけでもないだろう。納期を迫られている開発チームは、セキュリティに関しても、多くの手抜きを余儀なくされるだろう。
私はこれまで3つのアーリーステージのSaaSスタートアップでCTOを務めてきました。(Teamleader、Officient、Futureproofed)以下に、これらの過去のSaaS企業の経験から学んだことをまとめました。

車輪の再発明を避ける
パスワードによるログインシステムは作らないことだ。確かに数日で構築することはできますが、それを維持し、将来的に高度な保護機能を追加するためのコストは非常に高くなります。Gmailのようなシングルサインオンによるログインを使うか、Auth0.comのようなサービスを使うことを検討してください。 よりスムーズで機能豊富なログイン体験ができるだけでなく、ログインに関連するセキュリティ面(ブルートフォース、サードパーティサービスでのユーザー認証情報の流出、アカウント乗っ取り攻撃の回避と検出、メールアドレスの検証、ロギング...)について心配する必要がなくなります。
結局のところ、適切なベンダーを選べば、攻撃対象を減らすだけでなく、より価値のある機能に費やせる時間も獲得できるのだ。
数週間から数カ月を節約できる他の素晴らしい例もある:
- クレジットカードを保存せず、StripeやMollie、Chargebeeなどを利用する。
- MySQLやPostgreSQL、ElasticSearchのような複雑なソフトウェアを自分で動かすのはやめましょう。RDSのようなマネージドクラウドサービスを利用しましょう。
- 独自のログシステムを構築しないこと。SentryやPapertrailのようなシステムを使うこと(そして、機密データをそこに記録しないこと)。
- 自社でメール(SMTP)サーバーを運営せず、SendgridやMailgunのようなマネージドサービスを利用する。
- ウェブソケット・サーバーを構築せず、Pusher.comのようなマネージド・サービスを利用する。
- フィーチャーフラグシステムは自前で構築せず、Launchdarklyのようなサービスを利用する。
- カレンダーの統合は自分で作らず、cronofy.comのようなツールを使う。
- 一般的なインテグレーションを構築する際は、Apideckのようなその分野の統一APIをチェックしてください。
危機管理コミュニケーションの準備に時間をかける
顧客と会話するためのチャットアプリケーションや、問題を伝えるための管理されたステータスページやTwitterアカウントなどのツールが設定されていることを確認してください。何か悪いことが起こった場合に備えて、危機の際にあなたが問題の解決に専念している間に、会社の他のメンバーが顧客にコミュニケーションできるようにするのは素晴らしい習慣です。
グローバル・ガードレールの追加
あなたはおそらく、開発者からのPull Requestをレビューしているだろう!保守性、パフォーマンス、機能性をレビューするのは大変な作業です。セキュリティについてもレビューする時間がありますか?確かに、いくつかのリスクはカバーできるでしょう。しかし、いくつかのガードレールやグローバルな設定を追加することで、いくつかのリスクを回避することができるのはいいことです。
運が良ければ、特定の問題に対してグローバルな修正が存在することもある。
- nodeJSを使用していて、プロトタイプ汚染について考えるのが好きでないなら、このクラスの攻撃をアプリ全体で無効にするために、プロトタイプを凍結すべきである。Aikido 、あなたのためにこれを行うPull Requestを自動的に作成することができます。
- SQLを使用し、SQLインジェクション攻撃を恐れている場合(そうすべき)、アプリ全体の保護のためにWAF(AWS WAFのような)やRASP(Datadogのアプリセキュリティのような)を使用することができます。
- 多くのXSS攻撃を発見しているなら、ブラウザに非常に厳格なCSPポリシーを導入することで、その大部分を取り除くことができるだろう。
- 顧客の入力に基づくアウトバウンドリクエストを多く行っている場合、SSRF攻撃に対して脆弱かもしれない。これを完全にブロックするのは難しいかもしれないが、より悪いもの(AWSのIAM認証情報に対するIMDSv1攻撃など)につながらないようにすることで、被害を軽減できるかもしれない。Aikido デフォルトでAWSクラウドでこれを監視する。
- オブジェクト・ストレージを扱う場合、Pickle、XML、JavaやPHPの(un)serializeなどの特定のタイプの関数を避け、代わりにJSONのような単純なストレージ・オプションを使用することで、安全でないシリアライゼーションに関連する多くの典型的な悪用を避けることができます。Aikido 、デフォルトでコードベース内のこれらの種類の関数を監視します。
- CDNやキャッシュ機構を使用する場合、キャッシュポイズニング攻撃のあらゆる種類を避けるために、別々のCDN設定で静的資産に別々のドメインを使用してください(ChatGPTは最近この罠にはまりました)。
この簡単なトリックで開発者を教育しよう
あなたのプロセスに導入できる簡単なハック(ダジャレ)がある。スプリントプランニング中に開発チームに尋ねる簡単な質問だ:
私たちが構築している機能がハッキングされる可能性は?
開発チームは、悪用される可能性のあるシナリオをすべて予期しているわけではな いかもしれないが、この方法論は、スケールアップするのは至って簡単である。これは、開発者が開発作業を行う前に、セキュリティの考慮事項をチェックすることを促す小さな追加ステップである。

コードベースのさまざまな部分に優先順位を割り当てる
すべてがハッカーの大きな標的になるわけではない。彼らが好んで狙う主なコンポーネントは以下の通りだ:
- 決済システム、ウォレット、クレジットシステム
- SMSやvoipのような高価なAPIに接続する機能(Twilioを考える)
- パスワードリセット、ログインシステム、ユーザー招待
- PDF、Excelなど、危険な操作を行う可能性のあるエクスポート機能
- ファイルや画像のアップロードに関するもの
- ウェブフックなど、設計上アウトバウンドリクエストを行う機能
- 電子メールを送信するあらゆる種類の機能、特にパーソナライズされたコンテンツ
追記:Aikido 、各コードベースにリスク・レベルを割り当てることで、スタートアップのユニバースにおけるトップ・リポジトリのみに焦点を当てることができる。
人間的な側面も忘れずに
小規模スタートアップのCTOとして、あなたは通常、運用セキュリティの責任者でもある。チームのアカウントを保護する手段を提供しましょう。2FAのためにハードウェアのユビキーやソフトウェアアプリを使うようにし、可能であればそれを強制する。Gmailのようなツールでは、これを強制することができる。フィッシング攻撃に対する最初の防御線として最適だ。
セキュリティー対策を常に最新に保つのは難しい
ソフトウェアに対する新しい種類の攻撃について学ぶのは難しい。自分が使っている言語(Python、Node、Goなど)のアップデートや、OSのパッチ、オープンソースのパッケージで人気のあるエクスプロイトをフォローアップするのも大変だ。特定の攻撃は時間の経過とともに流行するようになるため、トレンドを追うことは有益だ。例えば、昨年サブドメイン乗っ取り攻撃が増加したことに気づいたAikido 、そのリスクを防止し、これらのDNSレコードの監視を自動化するために、サブドメイン乗っ取り監視ツールを導入した。
自動化する
私が以前勤めていた会社では、セキュリティ担当者が定期的なセキュリティタスクをカレンダーに書き込むことで、セキュリティの次のレベルを目指していました。四半期ごとに全アプリのアクセスレビューを行う。毎週2、3週間ごとにコードの漏洩スキャンを行い、毎週金曜日にオープンソースパッケージのCVEをクリーンアップし、頻繁にSASTスキャンを行い、毎月サブドメインの乗っ取りに対するDNSレコードを検証する...。これらのタスクのアウトプットをトリアージして、開発者が実行できるようにするのは大変だった。さらに悪いことに、この担当者が会社を辞めたとき、他の誰かがこれらのタスクを引き継ぐことは困難だった。
そこでAikido アイデアが膨らみ始めました。私たちは、上記のすべてを自動化し、ノイズをフィルタリングし、SlackやJiraで開発者の目の前にタスクを届けるソリューションを必要としていました。
今日からAikido コードとクラウドのスキャンを始めましょう。こちらからサインアップして、無料でスキャンを始めましょう。