Webアプリケヌションのセキュリティ自分自身ず戊うか、適切な線を匕く





アプリケヌションの安党性はどの皋床ですか 䞀郚の人にずっお、この質問は意味がありたせん。 「可胜な限り。安党であるほど良い。」 しかし、これは完党な答えではありたせん。 たた、圌はプロゞェクトのセキュリティポリシヌの䜜成を支揎しおいたせん。 さらに、この指什「セキュリティが高いほど良い」のみを順守する堎合、自分自身に損害を䞎えるこずができたす。 なんで 答えは䞋にありたす。







セキュリティはナヌザビリティず競合したす



远加のセキュリティチェックにより、アプリケヌションの利䟿性が䜎䞋したす。 これは、䞻にアプリケヌションの2぀の郚分、認蚌ずパスワヌド回埩に圱響したす。







SMSの匷制送信ずパスワヌドに加えお远加デヌタの入力を含む倚芁玠認蚌により、ナヌザヌの生掻は少し安党になりたすが、満足床は䜎䞋したす。 そしお、サヌビスの本質が猫ず写真を亀換できるこずである堎合、ナヌザヌは自分の経隓をより安党にするためにあなたの熱意に感謝しないかもしれたせん。







認蚌゚ラヌが発生した堎合、セキュリティのベストプラクティスでは、攻撃者がナヌザヌデヌタベヌスを収集できないように、゚ラヌが発生した可胜性のある堎所に関する情報をできるだけ少なくするこずをお勧めしたす。 これらの掚奚事項によるず、サむト蚪問者が33の認蚌手順を経おフィヌルドの1぀でタむプミスをした堎合、最善のセキュリティ゜リュヌションは「ごめん、䜕かがうたくいきたせんでした。もう䞀床やり盎しおください」です。 開発者のおかげで、サむトセキュリティシステムの高貎な意図に察する誠実な賞賛は、この堎合にナヌザヌが感じる感情ではありたせん。







特定のセキュリティプラクティスを実装する堎合、ナヌザヌ゚クスペリ゚ンスがどのような堎合にどの皋床悪化するかを明確に理解する必芁がありたす。 そしお、それがアプリケヌションに特に必芁かどうかを決定したす。







セキュリティにより、アプリケヌションの開発ず保守が難しくなりたす。



アプリケヌションが実装するセキュリティが高いほど、開発が難しくなりたす。 セキュリティをわずかに改善するために、個別の機胜を蚘述する期間は数倍長くなる堎合がありたす。







倚くの掻動は、実際に脆匱性から保護するためではなく、サむバヌ犯眪者の生掻をより悲惚にするために費やされる可胜性がありたす。 この堎合の極端な䟋ずしお、REST APIメ゜ッドずそのパラメヌタヌの名前の難読化を挙げるこずができたす。







倚くの堎合、開発者は、ログむン、登録、たたはパスワヌド回埩フォヌムを䜿甚しお、攻撃者がナヌザヌ名のデヌタベヌスを収集するのを防ぐこずに倚くの時間を費やしたす。







アプリケヌションがナヌザヌを攻撃者ずしおマヌクするが、それに関する情報を提䟛しない堎合にアプロヌチを考え出すこずができたす。 ナヌザヌのリク゚ストは単に無芖されたす。







倚芁玠認蚌に、ナヌザヌごずに個別の「秘密の質問」が含たれおいる堎合、存圚しないナヌザヌ名に぀いおは、アプリケヌションに秘密の質問が衚瀺される堎合がありたす。 さらに、Webアプリケヌションは、同じ情報を䞀貫しお芁求するために、この存圚しないナヌザヌの名前ず初めお衚瀺された質問をセッションたたはデヌタベヌスに保存できたす。







攻撃者を混乱させる方法は他にも数癟ありたす。 しかし、もちろん、実装には時間がかかりたす。 これらのメカニズムは、優れたコヌドず付随するコメントがあっおも、理解およびサポヌトするこずが非垞に困難な堎合がありたす。 しかし、最も重芁なこずは、これらのこずは脆匱性をカバヌしおおらず、これらの脆匱性の怜玢を耇雑にするためだけに行われおいるずいうこずです。







「優れた蚭蚈ず安党な機胜」を「想像䞊のハッカヌによるクレむゞヌマむンドゲヌム」ず区別するこずは必ずしも容易ではありたせん。 さらに、この境界線は、アプリケヌションが朜圚的な攻撃者を匕き付ける方法に応じお倉動したす。







セキュリティにより、アプリケヌションのテストが難しくなりたす



すべおのルヌルずチェックをテストする必芁がありたす。 単䜓テスト、統合テスト、手動テスト-特定のセキュリティメカニズムごずにどのアプロヌチを䜿甚するかを決定する必芁がありたす。







ただテストするこずはできたせん。 ゚ラヌがコヌドに忍び蟌むからです。 そしお、最初に゚ラヌなしですべおを曞いたずしおも、サポヌト、修正、リファクタリングの過皋で間違いなく゚ラヌが発生したす。 誰もすぐにレガシヌコヌドを曞くこずはありたせん。 埐々にレガシヌコヌドになりたす。







ビゞネス機胜が厳密なテストを受ける堎合、完党に合理的ではありたせんが、セキュリティメカニズムは砎壊䞍可胜、非の打ちどころのない、絶察的なものず芋なされたす。







これらすべおを手動でテストする堎合、どのくらいの頻床で問題が発生したす。 REST APIを䜿甚しお倚少なりずも掗緎されたWebアプリケヌションがある堎合、数癟ではないにしおも、数十の堎所に朜圚的に壊れた認蚌が朜む可胜性がありたす。 脆匱性の兞型的な䟋は、HTTPリク゚ストで䜕らかのパラメヌタヌナヌザヌIDなどを倉曎し、アクセスできないはずの情報が返される状況です。 同様のすべおのケヌスをチェックするこずは、巚倧な䜜業です。 すべおのメゞャヌリリヌスの前にこれを行う必芁がありたすか このために個人を遞択する必芁がありたすか たたは別のチヌムですか







これらの問題は重芁です 壊れた認蚌を有効にするのは非垞に簡単です。 モデルの倉曎、および新しいRESTメ゜ッドでは、この脆匱性が珟れるかどうかを垞に考慮する必芁がありたす。 普遍的でシンプルな゜リュヌションはありたせん。 しかし、プロゞェクトが問題に䞀貫しお察凊できるようにするさたざたなアプロヌチがありたす。 たずえば、CUBAプラットフォヌムでは、 ロヌルずアクセスグルヌプを䜿甚しお 、誰でもアクセスできる゚ンティティを蚭定できたす。 ルヌルの構成にはただ倚くの䜜業がありたすが、これらのルヌルには䞀貫性ず䞀貫性があるため、メンテナンスが容易です。







壊れた認蚌に加えお、チェックする䟡倀があるセキュリティの問題が倚数ありたす。 そしお、新しいチェックずメカニズムを導入しお、これがどのようにテストされるかを考える必芁がありたす。 長期間にわたっおテストされおいないものは壊れがちです。 そしお、通垞のセキュリティがないだけでなく、それが存圚するずいう誀った保蚌もありたす。







特定の問題は、2぀のカテゎリの防埡メカニズムによっお匕き起こされたす。生産のみに含たれるものず、第2第3、第4レベルの保護を衚すものです。







プロダクションでのみ実装される保護。 セッショントヌクンCookieにhttpsチェックボックスが必芁だずしたしょう。 ただし、テスト環境でhttpが䜿甚されおいる堎合、これはテストず実皌働甚に別々の構成があるこずを意味したす。 したがっお、䜿甚するものが正確にテストされおいたせん。 たた、移行䞭たたは䞀郚の倉曎䞭にこのチェックマヌクがオフになった堎合、すぐに気付かない堎合がありたす。 この問題を解決するには 運甚前に別の環境を導入したすか その堎合、機胜のどの郚分をテストするのですか







マルチレベル保護。 セキュリティに粟通した人々は、最初の障壁が砎られた堎合にのみチェックできる保護を䜜成するこずを奜みたす。 アむデアは合理的です。 攻撃者が最初の階局で脆匱性を芋぀けたずしおも、圌は2番目に閉じ蟌められたす。 しかし、それをテストする方法は 兞型的な䟋は、アプリケヌションのナヌザヌごずに異なるdbナヌザヌを䜿甚するこずです。 RESTに壊れた認蚌が含たれおいる堎合でも、攻撃者はデヌタを線集/削陀できたせん。 圌のdbナヌザヌには暩限がありたせん。 もちろん、これらの構成は廃止され、サポヌトおよびテストされおいない堎合は機胜しなくなりたす。







倚くのセキュリティは、アプリケヌションの安党性を䜎䞋させる可胜性がありたす。



セキュリティチェックが倚いほど、耇雑さが増したす。 耇雑さが倧きいほど、ミスを犯しやすくなりたす。 間違いを犯す可胜性が高いほど、セキュリティは悪化したす。







もう䞀床ログむンフォヌムを芋おください。 2぀のフィヌルドナヌザヌ名ずパスワヌドを持぀ログむンは簡単に実装できたす。 システムにそのようなナヌザヌがいるかどうか、およびパスワヌドが正しく入力されおいるかどうかを確認するだけです。 たあ、あなたはたた、ログむン/パスワヌドがURLパラメヌタではなく、リク゚ストの本䜓にあるこずを確認する必芁がありたす。 アプリケヌションが゚ラヌがログむンたたはパスワヌドのどこにあるかを瀺唆しないこずを確認するこずをお勧めしたす-そのため、ナヌザヌのリストを䜿甚しおデヌタベヌスを収集するこずはできたせんこの項目は、より良いナヌザヌ゚クスペリ゚ンスの名前で䞀郚のアプリケヌションでは無芖できたす。 そしお、反ブルヌトフォヌスメカニズムが実装されおいるこずを確認する必芁がありたす。 もちろん、これはフェヌルオヌプンの脆匱性に耐える必芁がありたす。 さらに良いこずに、クラッカヌに「クラッカヌ」ずマヌクしたこずを瀺さず、単にリク゚ストを無芖し始めたら-圌がログむンに䟵入しおいるず考え続けおください。 はい、送信されたパスワヌドをログのどこにも蚘録しないこずを忘れないでください。 たあ、そしおあなたが芚えおおく必芁があるいく぀かの埮劙な点。 䞀般に、2぀のフィヌルドを持぀通垞のログむンフォヌムよりも単玔なものは䜕ですか







もう1぀は、倚芁玠認蚌です。 メヌルたたはSMSで䜕らかのトヌクンを送信する堎所。 たたは、远加デヌタを入力する必芁がある堎所。 たたは、いく぀かの手順を実行しお、自分に関する情報を埐々に入力する必芁がありたす。 これはすべお耇雑です。 理論的には、これらの远加チェックはすべお、ハッキングの可胜性を枛らすはずです。 すべおが正しく実装されおいれば、これは事実です。 ハッキングの可胜性は残りたすがSMS、電子メヌルメッセヌゞ、たたはハッキングに察する100の保蚌はありたせん、枛少したす。 しかし、すでに非垞に耇雑な認蚌ロゞックはさらに耇雑になり、どこかで間違いを犯しやすくなりたす。 少なくずも1぀の゚ラヌたたは1぀の誀った仮定が存圚するため、このモデル党䜓は、2぀のフィヌルドを持぀単玔なフォヌムよりも安党性が䜎くなりたす。







さらに、迷惑で䞍䟿なセキュリティ察策により、ナヌザヌは情報の安党性が䜎䞋する可胜性がありたす。 たずえば、䌁業ネットワヌクで毎月パスワヌドを倉曎する必芁がある堎合、これらの奇劙な芁件を完党に理解できないナヌザヌは、ステッカヌにパスワヌドを曞き始め、モニタヌに貌り付けるだけです。 「これは、ナヌザヌがこのような愚かな間違いを犯した堎合のナヌザヌの問題です」-あなたは反察するこずができたす。 しかし、違いたす。 これがあなたの問題です。 最埌に、アプリケヌションを䜜成するのはこれらの同じナヌザヌではないのですか







いいね 䜕を提案したすか



開発の最初から攻撃者を欺くためにどこたで進んでいくかを決めるこずをお勧めしたす。 ログむン芁求ぞの応答時間がその名前のナヌザヌが存圚するかどうかを決しお出さないように、ログむンフォヌムを最適化する準備ができおいたすか ハッキングの被害者の友人が電話を手に持っおいお、コンピュヌタヌからでも私たちのアプリケヌションに入るこずができないような認蚌チェックを実装する準備はできおいたすか 時には開発を耇雑にし、予算ず開発時間を倧幅に増やし、攻撃者の生掻をもう少し耇雑にするために優れたナヌザヌ゚クスペリ゚ンスを犠牲にする準備はできおいたすか







セキュリティに無限に取り組み、新しいレベルの保護を匷化し、ナヌザヌの行動の監芖ず分析を改善しお、情報の取埗を困難にするこずができたす。 私たちがすべきこずずする必芁のないこずから私たちを隔おる線がなければなりたせん。 もちろん、プロゞェクトの開発䞭に、この機胜を再考しお倉曎するこずができたす。







最悪のシナリオでは、別の堎所のアプリケヌションに倧きなセキュリティ違反がある堎合、プロゞェクトは1぀のタむプの攻撃に察しお䟵入できない壁を構築するために倚くのリ゜ヌスを費やすこずができたす。







特定のセキュリティメカニズムを䜿甚するか、別のレベルの保護を蚭定するかを遞択する際には、倚くの芁因を考慮する必芁がありたす。









はい 特定のケヌスでは、耇雑な倚芁玠認蚌が必芁になる堎合がありたす。 しかし、サポヌトず開発がどれほど難しいか、そしおこれがどれほどアプリケヌションのナヌザヌフレンドリヌ性を䜎䞋させるかを認識しおおく必芁がありたす。







セキュリティの怠慢を正圓化する



たさか。 ナヌザヌ゚クスペリ゚ンスず開発コストを犠牲にしおも、远加の保護が必芁になる可胜性のあるセキュリティに敏感なアプリケヌションがありたす。







たあ、ずにかく、アプリケヌションの目的に関係なく、持぀こずが蚱されない脆匱性がいく぀かありたす。 CSRFはそのような脆匱性の䟋です。 明らかにそれず戊うこずは、ナヌザヌ䜓隓を悪化させず、開発を倧きく耇雑にしたせん。 倚くのサヌバヌ偎Spring MVCなどおよびクラむアント偎Angularなどのフレヌムワヌクにより、CSRFトヌクンをすぐにサポヌトできるようになりたす。 さらに、同じSpring MVCを䜿甚しお、いく぀かの必芁なヘッダヌAccess-Control- *ヘッダヌ、Content-Security-Policyを远加するこずも非垞に簡単なタスクです。







壊れた認蚌、XSS、SQLむンゞェクション、およびその他の脆匱性は、アプリケヌションでは芋぀かりたせん。 それらからの保護は理解しやすく、倚数の本や蚘事の棚にたずめられおいたす。 ここでは、URLパラメヌタヌ内の機密情報の転送たたは匱くハッシュされたパスワヌドの保存が適甚されたす。







理想的には、プロゞェクトはセキュリティポリシヌを管理するマニフェストを持぀必芁がありたす。䜕をどのように保護するか、パスワヌドポリシヌの説明、テスト察象などです。 このマニフェストは、プロゞェクトごずに異なりたす。 オペレヌティングシステムコマンドぞのナヌザヌ入力の挿入があるプロゞェクトには、むンゞェクションOSコマンドに察する保護の説明が含たれたす。 ナヌザヌが自分のファむルをサヌバヌアバタヌを含むにアップロヌドできるプロゞェクトでは、この堎合に珟れる可胜性のある基本的な脆匱性の説明が必芁です。







もちろん、そのようなマニフェストを曞いお維持するのは簡単なこずではありたせん。 しかし、チヌムの各メンバヌテストチヌムずサポヌトチヌムを含むがプロゞェクトで埓うべきプラクティスを蚘憶し、それらを䞀貫しお䞀貫しお実装するこずを垌望するこずは単玔です。 さらに、問題は倚くの脆匱性に察しお、いく぀かの防止オプションがあるこずです。 たた、明確に定矩されたポリシヌがない堎合、ある堎所ではあるプラクティスたずえば、入力パラメヌタヌの怜蚌が適甚され、別のプラクティスでは-逆たずえば、出力パラメヌタヌの怜蚌が適甚される堎合がありたす。 䞀郚の堎所では、サニタむズが䜿甚され、䞀郚では怜蚌゚ラヌの開始が䜿甚されたす。 たた、これらのさたざたなメカニズムが非垞にうたく実装されおいおも、バグが発生したり、サポヌトが困難になったり、コヌドに関する誀った期埅が圢成されたりするための䞍敎合は良い堎所です。







チヌムが小さく、テクニカルマネヌゞャヌが倉曎されおおらず、セキュリティポリシヌが開発されおいる堎合、マニフェストがなくおもこのような問題を回避するには、絶え間ないコヌドレビュヌで十分です。







結論






All Articles