ブログ

事例に基づく不安が WAF の必要性を物語る

ロリ・マクヴィッティ サムネイル
ロリ・マクヴィッティ
2017 年 10 月 5 日公開

オンラインでの学習は重要です。 特に、開発者であると自認する人にとってはそうです。 Stack Overflow の年次開発者アンケート(何万もの回答が寄せられる) を覗いてみると、正式なトレーニングを受けていない開発者がかなりの割合でいることがわかります。

開発教育
  • 世界中の現在のプロの開発者のうち、回答者の 76.5% が、修士号または同等の学位など、学士号以上の学位を取得していると答えています。
  • 20.9%は、ビジネス、社会科学、自然科学、非コンピュータ工学、芸術など他の分野を専攻したと答えた。
  • 現在のプロの開発者のうち、32% が、正式な教育はキャリアの成功にとってあまり重要ではない、またはまったく重要ではないと回答しました。 開発者全体の 90% が、少なくともある程度は独学だと考えていることを考えると、これはまったく驚くべきことではありません。正式な学位は教育の 1 つの側面にすぎず、実際の日常業務の多くは、会社の個々の技術スタックの決定に依存しています。

調査結果の強調表示された部分に注目してください。 なぜこれが真実なのかについては論文を書くこともできますが、私が学士課程を勉強していたときに Pascal、C++、および LISP を使用していたと言えば十分でしょう。 私の最初の本格的な開発の仕事では C/C++ が必要だったので、その点は得意でした。 しかし、後にJavaを学ぶ必要が出てきました。 そしてSQL。 私はそれをするために学校に戻ったのではない。 私は本やヘルプ ファイル、その他入手できるあらゆるドキュメントを参考にしました。 正式な教育を受けているかどうかに関わらず、独学が標準となっています。なぜなら、テクノロジーは変化し、専門家には新しい言語やフレームワークを学ぶためだけに学校に戻る時間がないからです。

これは、私たちの誰にとっても、まったく珍しいことではないと思います。 私たちは新しい CLI や API を学ぶために学校に戻ることはありません。Python や Node.js を学ぶためだけに新しい学位を取得することもありません。 私たちは、書籍やインターネット上のコンテンツ、コミュニティに頼り、「サンプルコード」に大きく依存しています。

開発者が自ら学ぶ方法

私は今でも、自社のエンジニアやアーキテクトだけでなく、他の人々のブログやドキュメントにも頼っています。 なぜなら、今博士課程に申し込んでも、 Express フレームワークJQueryの詳細を学ぶことにはあまり役立たないからです。

したがって、ネットワーク エンジニアとネットワーク運用担当者 (DevOps の第 2 波の最初の部分を担うため、今後は NetOps と呼ばれる) も、必要なツールとテクノロジーに習熟するために必要なスキルを習得するために、同じ種類の資料に頼る可能性が高いのは当然です。 初めて聞く方のために説明すると、これはスクリプト言語と API です。 そして彼らも、生産パイプラインの自動化を開始した言語とシステムに慣れてくると、間違いなく心を込めてコピー&ペーストするようになるだろう。

さて、私が今日この記事を書いている理由です。 サンプルコード。

たくさんありますよ。 これは良いコードです。私が感謝の気持ちを持っていないとか、サンプルコードを重視していないなどと思って立ち去らないでください。 これは、新しい言語や API を学習しようとしている人にとって非常に貴重なリソースです。 私が不満を言いたいのは、サンプル コードとセキュリティの間に断絶があり、それに対処する必要があるということです。 なぜなら、新しい人にコーディングを教えるとき、セキュリティを露骨に無視するのではなく、少なくともセキュリティに対する意識を植え付ける必要があるからです。

私がこう言うのは、アプリのセキュリティはオプションではない(繰り返しますが、オプションではない)からです。 統計を次から次へと挙げることもできますが、この時点では私の言っていることは既に理解されていると思います。 アプリのセキュリティはオプションではなく、開発に不可欠な要素として認識されるまでその姿勢を広めることが重要です。 注意すべきは、アプリだけではなく、DevOps や NetOps で自動化を推進するスクリプトやシステムも含まれます。

私の不安の原因としてこの例を挙げます。 

コード自体は美しいです。 本当に。 フォーマットが適切で、間隔も適切です。 読みやすい。 このコードが気に入りました。 ただし、セキュリティルールゼロに完全に違反する部分は除きます。

例はセキュリティルール0に違反しています

ユーザー入力を信頼してはいけません。 これまで。

入力内容をサニタイズする必要性について、まったく言及がないことに失望しています。 コメントにも記事の本文にも記載されていません。 このコードは、悪意のあるコンテンツが含まれている可能性をほとんど懸念することなく、「ユーザー名」を別の関数に渡すだけです。

しかし、ロリさん、明らかにこのコードは、実際に本番環境で使用することを想定していないものの実装を説明するためのものです。 それはリスクではありません。

それは重要なことではありません。 重要なのは、人々にコーディングを教え続けるのであれば、少なくとも安全にコーディングする方法を教えるよう努めるべきだということです。 C/C++ を初めて使用する開発者に、ポインターにアクセスする前にメモリを割り当てないとクラッシュすることを指摘するのと同じくらい日常的に言及します

セキュリティと SDLC が口先だけで語られても、実際問題として人々にコーディングを教えるとなると、突然、SEP (someone other's problem) フィールドに囲まれて隅っこに孤立してしまうという例を、ブログに何本も書くことができます。

これは、Webapplicationファイアウォールがあらゆるアプリセキュリティ戦略にとって重要な要素である理由の 1 つにすぎません。 組織は、アプリのセキュリティ ホールの長いリストの最新の被害者にならないように、ユーザー入力とそれを正当なものとして盲目的に受け入れるアプリの間に防火帯を設ける必要があります。

なぜなら、コードのセキュリティ保護について話すのは好きでも、実際に他の人に教えるときには、それを実践していないからです。 セキュリティに対するこうした配慮の欠如について、私たちはもっと認識する必要があります。開発者 (そしてますます NetOps) が学ぶのはサンプル コードであっても同じです。しかし、私たちがセキュリティに取り組み始めるまでは、安全でないコードによって生じたギャップを埋めるために WAF のようなセキュリティ ソリューションが必要です。
 

* あるいは英語らしい。 ああ、わざとそうしてるんだよ。 時々間違って言うのも楽しいから。