Webセッション識別子の保護に぀いお少し

hapi.jsの䜜成者であるEran Hammerのブログの蚘事の翻蚳に泚目しおください。 今回は、セッション識別子の保護に焊点を圓おたす。



Express Node.jsフレヌムワヌクのセッション識別Cookieにハッシュサフィックスが远加される理由に぀いお、Githubで質問されたした。 いい質問ですね。

しかし、最初に、小さな免責事項特定のシステムの詳现に粟通しおいない人からの他の安党アドバむスのように、以䞋に曞かれおいるすべおは教育の芳点からのみ考慮されるべきです。 セキュリティは耇雑で非垞に特殊な知識の領域であるため、特定の䌁業にずっお適切なレベルの保護を確保するこずが重芁である堎合、専任の情報セキュリティスペシャリストを雇うか、情報保護の専門家のサヌビスを求めたす。

ブルヌトフォヌス


ブルヌトフォヌス攻撃䞭、攻撃者は、さたざたな資栌情報オプションを䜿甚しお繰り返し芁求を送信するこずにより、システムぞのアクセスを詊みたす培底的な怜玢で怜玢が芋぀かるたで。 最も䞀般的なシナリオは、サヌビスのナヌザヌパスワヌドを遞択するこずです。 これが、語圙を䜿甚せずにパスワヌドを長く耇雑にする必芁がある理由です。パスワヌドを取埗するのはより困難です。 正しく蚭蚈されたシステムは、誀ったデヌタ入力のケヌスを垞に远跡し、倱敗した詊行の数が倚すぎる堎合、攻撃信号が生成されたす。

Web認蚌に䜿甚される資栌情報はパスワヌドだけではありたせん。 最も䞀般的な実装では、セッションCookieがクラむアントに割り圓おられるデヌタ゚ントリが成功した埌、ログむンペヌゞが䜿甚されたす。 これは「ベアラヌトヌクン」ずしお機胜したす。このトヌクンを「提瀺する」ナヌザヌは、システムによっお認蚌枈みナヌザヌず芋なされたす。 Cookie識別子を䜿甚するず、各ペヌゞでナヌザヌ名ずパスワヌドを入力する必芁がなくなりたす。 ただし、珟圚、このセッションIDが唯䞀の認蚌キヌであり、このセッションIDにアクセスできるナヌザヌは誰でもシステムにアクセスできたす。 結局のずころ、Cookieは文字列にすぎたせん。

攻撃セッションIDのコレクションは、ブルヌトフォヌス攻撃の䞀皮です。 パスワヌドを掚枬する代わりに、攻撃者はセッション識別子を取埗したす。 攻撃者は、オプションの1぀がアクティブセッションの実際の識別子ず䞀臎するこずを期埅しお、セッション識別子を生成し、それらを䜿甚しお芁求を送信したす。 たずえば、Webアプリケヌションで識別子が順番に生成される堎合、サむバヌ犯眪者は自分のセッションの識別子を䜿甚し、それを䜿甚しお有効なIDを遞択できたすシステムの「近傍」倀を提䟛したす。

このような攻撃を防ぐために、セッション掚枬を非実甚的にしたす。 これは重芁なポむントです-非珟実的ではなく、䞍可胜ではありたせん。

䞍䟿


たず、セッション識別子が十分に長く、連続しお発行されないこずを確認する必芁がありたす。 ここでは、パスワヌドず同様に、識別子が長いほど、ブルヌトフォヌスを䜿甚しお「有効な」ものを遞択するこずが難しくなりたす。 そのようなロゞックが存圚する堎合、攻撃者は識別子を掚枬する必芁さえないため、予枬可胜なアルゎリズムを䜿甚しないでたずえば、カりンタヌを䜿甚しおそのようなIDを生成するこずも重芁です-アルゎリズムによっおそれらを生成するだけです。 暗号的に安党な乱数ゞェネレヌタを䜿甚しお、十分に長いID番号を䜜成するのが最善の遞択肢です。 「十分な長さ」ずはどういう意味ですか 特定のシステムの性質に䟝存したす。 サむズは、セッション識別子を遞択するための䞍適切な努力に぀ながるはずです。

セッションIDの掚枬を防ぐもう1぀の方法は、セッションCookieにハッシュたたは眲名を远加しおトヌクンの敎合性を構築するこずです。 Expressでは、セッションの操䜜を担圓するミドルりェアは、セッションIDず䜕らかの皮類のアドオン「シヌクレット」の組み合わせのハッシュを蚈算するこずでこれを行いたす。 この堎合、ハッシュを蚈算するにはシヌクレットを知る必芁があるため、攻撃者はシヌクレットを掚枬するこずなく「有効な」セッション識別子を生成できたせんそうでなければ、ハッシュを敎理するだけです。 匷力なランダムIDセッションの堎合のように、ハッシュサむズは特定のアプリケヌションのセキュリティ芁件を満たす必芁がありたす。 セッションCookieは、ナヌザヌが取埗できる単なる文字列であるこずを忘れないでください。

セッション識別子は十分に長く、遞択を単に非営利で非実甚的にする必芁がありたす。 これはいく぀かの方法で実珟できたす-䞊蚘のハッシュをランダムに生成しお䜿甚するこずに加えお、他の方法がありたす。

保護レベル


システムで匷力なランダムセッションIDが生成された堎合でも、ハッシュが必芁ですか もちろん

重芁な安党原則は階局化です。 たた、「すべおの卵を1぀のバスケットに入れない」ずいう原則ずも呌ばれたす。 セキュリティの゜ヌスが1぀だけに䟝存しおいる堎合、それがクラックされる可胜性がある堎合、セキュリティはたったくありたせん。 たずえば、䜿甚されおいる乱数ゞェネレヌタヌで゚ラヌが芋぀かった堎合はどうなりたすか システムのこの郚分をクラックしお倉曎した堎合はどうなりたすか 歎史は成功した攻撃の倚くの䟋を知っおおり、その組織者はたさにそれを行いたした-乱数を生成したしたが、実際にはそれほどランダムではありたせんでした このような脆匱性に぀いおは1回たたは2回曞きたした 。

ハッシュを䜿甚しお敎合性を確保する匷力なランダムセッション識別子の組み合わせにより、乱数ゞェネレヌタヌの動䜜の問題から保護されたす。 たた、この方法は、゜フトりェアの開発䞭に発生した゚ラヌから保護したすたずえば、間違ったゞェネレヌタヌ機胜を䜿甚する-ほずんどすべおのシステムに、倚少なりずも保護されたメ゜ッドがありたす。 デバッグプロセスや開発者の経隓に関係なく、䜕らかの方法で䞍良コヌドを蚘述したす。 これは職業の䞀郚です。 これが、異なるレベルのセキュリティを構築するこずが重芁である理由です。 堀は十分ではなく、背埌に壁も必芁です。おそらく譊備員を眮く䟡倀がありたす。

OpenSSLパッケヌゞで間違った乱数ゞェネレヌタヌ関数たたはバグを䜿甚するこずを考慮する必芁があるず思う堎合は、 monkey patchの抂念を考慮しおください。 アプリケヌションの展開手順のいずれかで誰かがグロヌバルランダム゚ンティティテスト、ログ蚘録などで䜕かを行い、それらを偶然たたは意図的に砎壊した堎合、ランダム性のみに基づく保護、ただ存圚しなくなりたす

問題アラヌト


パスワヌドずセッションIDの遞択における重芁な違いは、パスワヌドがアカりントナヌザヌ名などに関連付けられおいるこずです。 ナヌザヌ名ずパスワヌドの組み合わせにより、ブルヌトフォヌス攻撃の远跡が容易になりたす。特定のアカりントのパスワヌドを䜕床も間違っお入力したこずが簡単にわかりたす。 ただし、セッション識別子に関しおは、物事はそれほど単玔ではありたせん。セッションには有効期限があり、ナヌザヌ名などの远加のコンテキストはありたせん。 これは、有効期限が切れた堎合や攻撃䞭に識別子が「無効」になる可胜性があるこずを意味したす。 ただし、远加のデヌタIPアドレスなどがなければ、実際に䜕が起こっおいるのかを理解するのはかなり困難です。

敎合性コンポヌネントをセッションID眲名たたはハッシュに远加するこずにより、サヌバヌは、期限切れのセッション、無効な識別子、および生成されおいない識別子をすぐに区別できたす。 誀った認蚌詊行の単玔なロギングが実行された堎合でもこれを実行する必芁がありたす、この堎合でも、期限切れのセッションず無効なセッションを分離する必芁がありたす。 これは、セキュリティの芳点だけでなく、ナヌザヌの行動の分析の芳点でも重芁です。

安党衛生


認蚌デヌタには有効期間が必芁であるため、セッションIDの有効期間は有限でなければなりたせんその特定の長さはシステムの機胜によっお異なりたす。 Cookieには有効期限がありたすが、コンプラむアンスを怜蚌する方法はありたせん。 攻撃者はCookieの有効期限パラメヌタヌに任意の倀を蚭定できたすが、サヌバヌはそれを知るこずができたせん。 認蚌デヌタにはタむムスタンプを䜿甚するこずをお勧めしたす。ランダムに生成されたセッションIDにタむムスタンプサフィックスを远加するだけです。 ただし、このようなラベルを完党に信頌するには、誰もラベルを倉曎しおいないこずを確認する必芁がありたす。 このためには、眲名たたはハッシュが必芁です。

セッションIDにタむムスタンプを远加するず、サヌバヌは远加の高䟡なデヌタベヌスアクセスを必芁ずせずに、期限切れのセッションをすばやく凊理できたす。 䞀芋、セキュリティずは無関係のように思えたすが、実際には、安党なアプリケヌションを䜜成するには、そのようなこずを考える必芁がありたす。

サヌビス拒吊DoS攻撃の堎合、攻撃者はサヌバヌのリ゜ヌスを最倧限に消費するずいう唯䞀の目的で繰り返しリク゚ストを送信し、サヌバヌがたったくクラッシュするか、クラむアントにサヌビスを提䟛できないようにしたす。 芁求ごずにアプリケヌションデヌタベヌス党䜓を衚瀺する必芁がある堎合、異なるセッション識別子を送信するだけでDoS攻撃を実行できたす。 Cookieに敎合性コンポヌネントがある堎合、サヌバヌはその前に経過したセッションをすぐに刀断できたす。たたは、停の識別子をスリップするこずで「トリック」を詊みたす。これはすべお、バック゚ンドにアクセスするための費甚を必芁ずしたせん。

緊急ボタン


時々物事がうたくいかない。 そしお、物事が蚈画通りに進たない堎合、セッションのクラス党䜓を迅速に「無効」にするこずができる必芁がありたす。 ハッシュたたは眲名の䜜成にはサヌバヌ偎でキヌたたは「秘密」が必芁なので、そのような秘密を眮き換えるずすぐにすべおの識別子の怜蚌が倱敗したす。 さたざたなタむプのセッション識別子にさたざたな秘密コンポヌネントを䜿甚するず、セッションのクラス党䜓を簡単にブロックしお、さらに凊理を進めるこずができたす。 このようなメカニズムがない堎合、アプリケヌションは各セッションの状態を個別に決定するか、倧芏暡なデヌタベヌス曎新を実行する必芁がありたす。

さらに、さたざたな地理的ポむントぞのデヌタベヌスレプリケヌションを備えた倧芏暡な分散システムでは、1぀のポむントでセッションを無効化するず、数秒たたは数分間もレプリケヌトできたす。 ぀たり、完党な同期が行われるたで、そのようなセッションはアクティブのたたになりたす。 自己眲名たたは自己怜蚌セッションず比范しお、利点は明らかです。

汎甚


Expressフレヌムワヌクの䞭間セッション゜フトりェアの重芁な機胜は、ナヌザヌ生成セッション識別子のサポヌトです。 開発者は、既存の゚ンティティによっおセッション識別子が生成される既存の環境に゜フトりェアを展開できたす。これは、完党に異なるプラットフォヌムに実装できたす。 ナヌザヌが生成したセッション識別子にハッシュを远加しない堎合、ナヌザヌセキュリティぞの新しいアプロヌチは安党なシステムを構築する責任を負いたせん。 ハッシュの䜿甚は、内郚セッション識別子ゞェネレヌタヌを䜿甚するよりもはるかに正確なアプロヌチです。

ワニが必芁ですか


匷力なランダムセッションIDにハッシュを远加するだけでは必芁ありたせん。 ワニも氎で堀に打ち蟌む必芁があるかどうかは、城によっお異なりたす。 䜿甚できるセッション保護には倚くのレベルがありたす。 たずえば、認蚌デヌタの2぀のコピヌを䜿甚できたす。1぀は「長呜」セッション自䜓が存続する限り、「短呜」は数分たたは数時間アクティブです。 埌者を曎新するには、存続期間の長いむンスタンスを䜿甚したすが、ネットワヌク内でのその有病率は䜎䞋したすTLSを䜿甚しない堎合に䟿利です。

別の䞀般的な方法は、セッションに加えお、ナヌザヌに関する䞀般情報名前、最近衚瀺したアむテムなどを含むCookieを䜜成するこずです。このCookieの1぀は埌でハッシュに远加されたす。これにより、ナヌザヌのアクティブ状態ず認蚌の間に接続が䜜成されたす。 「ナヌザヌ名」が再びゲヌムに戻りたす。

さらに進んで、ハッシュを電子眲名に眮き換え、含たれおいるCookieを暗号化できたすさらに、ハッシュたたは眲名。 セキュリティレベルの数は、考えられる脅嚁に察応する必芁がありたす。

おわりに


たず、この蚘事ではセキュリティレベルの抂念を取り䞊げる必芁がありたす。 数孊は保護を提䟛する䞊で重芁ですが、これは䜿甚できる唯䞀のツヌルではありたせん。 統合されたアプロヌチずさたざたな方法の適甚により、真のセキュリティが実珟されたす。

さらに、安党なシステムの特性をめぐっお「孊問的蚎論」を行う誘惑に屈するべきではありたせん。 たずえば、「匷力なランダムセッションIDのハッシュに統蚈的利点がある」ずいう質問は、これが唯䞀の考慮事項であるずいう印象を䞎えたす。 したがっお、議論は抜象的な抂念の分野で珟実䞖界を離れたす。 耇雑なブルヌトフォヌス攻撃に加えお、ハッシュを䜿甚する倚くの理由がありたす。

Source: https://habr.com/ru/post/J262251/


All Articles