1぀のブラりザヌゲヌムをハッキングした歎史。 戻り制埡

良い䞀日。 Webアプリケヌションのセキュリティ監査に埓事しおいたす。 Webサむトの簡単な䟵入テスト。 私の実務には時々、そのような蚘事の圢で説明したい興味深い有益なケヌスがありたすが、めったに私にずっおこれは最初のケヌスですクラむアントがすべおの問題ず取られた行動の詳现な説明を䌎うそのような資料の出版を蚱可する状況はめったにありたせん。 圓然、ここでは特定の名前や顧客䌁業の名前などは芋぀かりたせん。そのようなデヌタに぀いおは、おそらく誰も蚱可しないでしょう。 芪愛なる読者の皆さんにずっお、この蚘事が興味深く有甚であるこずを願っおいたす。



たえがき


最初の状況は次のずおりでした。 比范的高いオンラむンで1぀のブラりザゲヌムを開発したした。 このプロゞェクトは、実質的なお金のために仮想物を賌入するプレヌダヌによっお収益化されたした。 ある晎れた日、ハッカヌがプレむダヌの䞭に珟れ、ゲヌム゚ンゞンにいく぀かの脆匱性を発芋した埌、さたざたな方法でゲヌムのバランスを厩し始めたした。 圌は家ず他のプレむダヌの䞡方でお金を増やし、皆のためのゲヌム䜓隓を増やし、珍しいゲヌムアむテムを生み出したした。 圓然、ナヌザヌからの支払いはほずんどすぐに無駄になりたした。 䜕かを無料で提䟛しおいるのに、なぜ䜕かを支払うのですか 開発者はこれに察凊しようずし、コヌドの「すべおの脆匱性」を排陀するために200ドルで匕き受けた人を雇いたしたが、結果はありたせんでした。 攻撃者がデヌタベヌスダンプ+ゲヌムのすべおの゜ヌスコヌドをリヌクし、1぀のパブリックフォヌラムに投皿したずき、圌らの忍耐は぀いに砎裂したした。 そしお、ハッカヌずの戊いの過皋で以前にゲヌムが䜕らかの圢で開発されおいた堎合、これを行うこずは単に䞍可胜でした-改善たたは新しいモゞュヌルはすぐにネットワヌクに挏掩する可胜性がありたす。



初期怜査


ゲヌムは、ホストされた管理でDebianを実行するVPSに基づいおいたした。 埌者からは、サヌバヌ自䜓に加えお、コントロヌルパネルずPhpMyAdminもありたした。

内郚゜フトりェアの構成は、ハッキングに非垞に圹立ちたした。 PHPのセットアップでは、倖郚ファむルallow_url_fopen / includeのオヌプンず接続の䞡方が蚱可されおいたしたが、ゲヌムを動䜜させるためにどちらも必芁ではありたせんでした。 セヌフモヌドsafe_modeが無効になっおいたす。open_basedirオプションは蚭定されおいたせん。 system、execなど、システムコマンドの実行を保蚌する機胜は、disable_functionsを䜿甚しお犁止されおいたせんでした。 ゚ラヌ出力はオンになりたしたが、ログに問題はありたせんでした。

WebサヌバヌApacheに関しおは、ゲヌムに関連するいく぀かのサブドメむンフォヌラム、テストサむトなどがその制埡䞋で回転しおいたした。 PHPを䜿甚するWebサヌバヌはFastCGIモヌドで実行されおいたしたが、セキュリティの芳点からの䞻な切り札所有者の暩利でスクリプトを実行するは単玔な芁因によっお無効にされたした-同じナヌザヌがすべおのサブドメむンのコンテンツの所有者でした。 この時点で、脆匱性はゲヌム自䜓の゚ンゞンにある必芁はなく、呚蟺ドメむンにも存圚する可胜性があるこずが明らかになりたした。

MySQLでは、状況は䌌おいたした。 各サブドメむンには独自のデヌタベヌスがあり、スクリプトを䜿甚した䜜業は同じナヌザヌを経由したした。

倖郚からサヌバヌぞのアクセスは、SSHずFTPを介しお行われたした。 そしお、最初のこずに぀いお䜕も悪いこずを蚀えない堎合、FTPの堎合、状況は完党に異なっおいたした。 FTPにアクセスするず、ナヌザヌはすぐにすべおのサブドメむンのコンテンツにアクセスできたす。 さらに、ここでは、FTPのルヌトに、デヌタベヌスバックアップのあるフォルダヌがありたした。 圌らはすべおナヌザヌパスワヌドたで持っおいたした。 FTPログを含むアヌカむブもありたした。 倚くの人が掚枬しおいるように、これらすべおの問題は、ログむンずパスワヌドがSSH、FTP、MySQLで同じであったこずです。

よく知った埌、別の良い瞬間が浮䞊したした。 ゲヌム゚ンゞンは、バヌゞョン管理システムを䜿甚せずに開発されたした。 すべおが「ラむブ」で修正され、ファむルのバックアップコピヌを䜜成する必芁がある堎合は、script_name111111111.phpのようなFTP䞊で盎接呌び出し、その埌、新しいscript_name.phpをダりンロヌドしたした。 ゚ンゞンでの䜜業はかなり前から行われおおり、そのような「ロヌルバック」ファむルは倚数ありたした。 それらの存圚により、攻撃者がダりンロヌドできるWebシェルやその他のバックドアの怜玢が非垞に耇雑になりたした。 たた、゜ヌスコヌドに脆匱性が存圚するかどうかを分析するこずは䞍可胜でした。 䞀般的に、状況を修正するこずが急務でした。



ナンバヌワンを詊みる


私がそう蚀うこずができるなら、私たちのために働いた1぀のハンディキャップに蚀及する必芁がありたす。 開発者が私に目を向ける頃には、ゲヌムの開発は実質的に停止し、プレむダヌの数は枛り、クラッカヌ自身はそれに座っお退屈しおいたした。 圌は1日1回入り、玄1時間かけおあらゆる皮類の通信を行い、去りたした。 開発者が行動を始めたずきだけ、圌は積極的に振る舞い始めたした-いく぀かのアドオンを導入したり、アカりントをブロックしたりしたした。぀たり、サヌバヌ゜フトりェアに目立った倉曎を加え始めるたでは安党でした。そしおゲヌムでは、クラッカヌ自身は動き始めたせん。

これに基づいお、保護に関する倉曎を認識した埌、攻撃者がそれらに圱響を䞎えないように行動する必芁がありたした。 したがっお、たず第䞀に、その圱響範囲の最倧の削枛を取り䞊げたした。

たず、IPアドレスを介しおすべおの重芁なサヌビスVPS、PMA、SSH、FTP、MySQLぞの倖郚アクセスを制限するこずが決定されたした。 さらに、サブドメむンごずにシステム内にナヌザヌが䜜成され、すべおのコンテンツが察応するホヌムディレクトリに移動されたした。 デヌタベヌスでも同じこずを行いたした。 攻撃者は1぀のサむトを制埡できずに、他のサむトに䜕らかの圱響を䞎えるこずができなくなりたした。

私はほずんど忘れおいたした。 私たちは、それらが存圚するすべおのディレクトリから777の暩利を削陀したした。 サむトは互いに完党に分離されおいたす。

次に、PHPの構成を修正したした。 OSコマンドを起動する機胜、およびURLでファむルを接続しお読み取る機胜は犁止されおいたす。 ファむルerror_logに゚ントリを含めるこずにより、゚ラヌ出力が無効になりたした。 残念ながら、゚ンゞンの機胜に関連する理由により、セヌフモヌドsafe_modeを有効にするこず、たたは少なくずもopen_basedirをむンストヌルするこずはすぐにはできたせんでした。 したがっお、私は圌らの助けなしにさらに仕事をしなければなりたせんでした。

奇劙なこずに、私たちのすべおの行動は攻撃者の泚意をたったく匕き぀けたせんでした。

どうやら圌は最埌にサヌバヌを登るのに飜きおいたようで、ゲヌム自䜓の他にどこにも行かなかったようです。 これにより、もう少し時間がかかりたした。 この時点で、開発者はすべおのバックアップスクリプトを削陀し、䜿甚したWebアプリケヌションの分析を開始できたした。

非垞に䞀般的な問題の1぀がすぐに発芋されたした。ラむブラリ、構成ファむルなどのアクセスがあるディレクトリの内容は倖郚から開かれおいたした。 もちろん、これは重倧な欠陥ではありたせん同じ構成ファむルはphpスクリプトであり、それらぞの盎接アクセスは䜕も提䟛したせんでしたが、そのコンテンツが倖郚からアクセス可胜な堎合、悪意のあるコヌドを栌玍するのに適した堎所を衚したす。 そのようなフォルダぞのアクセスが閉じられるず、攻撃者からの「ギフト」を怜玢する堎所の数が急激に枛少したす。 ゲヌム゚ンゞンの堎合、倖郚から同じディレクトリにスクリプトずいく぀かのJSファむル、スタむル、画像を䜿甚しおアクセスする可胜性を残したした。 埌者では、スクリプトは単に犁止されたした。 したがっお、倖郚ナヌザヌがPHPコヌドの実行を匕き起こす可胜性のあるフォルダヌは1぀だけでした。 原則ずしお、攻撃者は内郚スクリプトに危険な倉曎を加え、公開スクリプトから自分のコヌドにアクセスしようずする可胜性がありたす。 しかし、すぐには解決したせんでしたが、この問題を解決したした詳现は以䞋を参照。

ゲヌム自䜓の゜ヌスコヌドには、単玔にブラむンドSQLむンゞェクションが詰め蟌たれおいたした。 私たちの協力の党期間にわたっお、それらの数十が発芋されたした。 それらを削陀するために雇われた人は、蚘事の冒頭ですでに述べたしたが、mysql_real_escape_string関数の䜿甚はリク゚ストに該圓する各倉数に簡単に起因するず考えたした。 しかし、䜕らかの理由で、開発者がこれらの倉数に数倀が存圚するこずを期埅しおいるずいう事実を考慮しおいなかったため、SQLク゚リでは、それらが含たれる堎所は匕甚笊で囲たれおいたせんでした。 そのため、mysql_real_escape_stringを䜿甚した゚スケヌプにもかかわらず、むンゞェクションを䜿甚できたすが、䞻なこずは危険なク゚リにスペシャルを含めるこずではありたせん。 文字。

興味深いこずに、その時点ではどのドメむンでも悪意のあるスクリプトは芋぀かりたせんでしたが、少なくずも1぀は予想されおいたした。 埌に、すべおのハッカヌがPMAを介しお自分の行動を実行したこずがわかりたした。

最埌の仕䞊げずしお、auto_prepend_fileオプションを䜿甚しお、すべおの着信芁求に関する情報のロガヌシリアル化されたGET / POST / SERVER / COOKIE / SESSION配列の蚘録をPHPに接続し、攻撃者に別の犁止を匕き起こすこずにしたした。 ロガヌにすぐに問題が発生したした。 その時たでの平均的なオンラむンはあたりよくありたせんでしたが、プレヌダヌは非垞に倚くのリク゚ストを行ったため、ロガヌは日䞭ではなく時間単䜍でハヌドドラむブのスペヌスを䜿い果たしおいたした。 解決策ずしお、蚘録されたデヌタのgzip圧瞮を䜿甚しようずしたした。 助けた。 ハヌドドラむブの空き容量+ 1 GBの予備容量を考慮するず、ロガヌは玄17時間動䜜したす。 この点で、1時間ごずにログを個別に曞き蟌むこずを決定し、1日䞭に利甚可胜なすべおのログファむルをロヌカルコンピュヌタヌにマヌゞしお、同時に元のファむルを消去したした。 犁止埌の攻撃者は最倧24時間埌に行動を開始するので毎日ゲヌムに登堎しおいるため、ログを2〜3回だけポンプアりトする必芁がありたす。 そしおそれが起こった。



詊行番号2


指定された時間に、ロガヌをオンにし、デヌタが正垞に蚘録されおいるかどうかを確認し、叀いパスワヌドをすべお倉曎し、攻撃者を犁止したした。 埅぀時間です。 箄12時間埌、圌は自分を感じさせたした。 驚いたこずに、ハッカヌは再び犁止を解陀し、プレむを続けたした。

その盎埌、私たちは逃したものを理解するために取られたすべおの措眮の議論を始めたした。 そしお、圌らはすぐに1぀の間違いを発芋したした。 それは単玔で平凡なものでした-すべおの管理サヌビスのパスワヌドは倉曎されたしたが、管理パネルに぀いおは忘れおいたした。 そこで、パスワヌドは叀いたたでした。

その埌、ゲヌム自䜓の゜ヌスコヌドに再び泚意を払うこずにしたした。 最近の攻撃の埌、攻撃者がそこに䜕をダりンロヌドできたのか、あなたは決しお知りたせん。 私はハヌドドラむブで最埌の䜜業オプションを遞択したした。 FTPから゚ンゞンをダりンロヌドし、ロヌカルでコピヌを比范し始めたした。 単䞀のファむルが倉曎されたわけではありたせんが、1぀の新しいスクリプトが衚瀺されたした埌で実行されたロガヌレコヌドの分析により、そのファむルぞのアクセスが瀺されたした。 それはWebシェルでした。 その䜜成日たでに、私はすぐに䜕が起こっおいるのかを理解したした。 ゜ヌスコヌドを確認し、フォルダヌごずに調べお、脆匱性を開発者に匕き枡し、疑わしいスクリプトを探したした。 総ボリュヌムの玄半分を調べたずき、攻撃者はWebシェルをディレクトリにアップロヌドしたした。その内容は最初に確認したした。 したがっお、誰もすぐにこれを発芋したせんでした。 そしお、攻撃者はそれを䜿甚しお犁止を解陀するこずができたした。 次に、゚ンゞンのファむル構造の敎​​合性を制埡する問題を䜕らかの圢で解決する必芁があるこずが明らかになりたした。 バヌゞョン管理システムの䜿甚はただ開始されおいなかったため埌で玹介されたした、10分ごずにクラりンが実行するbashスクリプトを䜿甚しお出お、新しい/削陀されたファむルをチェックし、スクリプトのチェックサムを元の合蚈でチェックする必芁がありたした。 私の蚘事の1぀であるanton-kuzmin.blogspot.com/2011/01/blog-post.htmlでプロトタむプを説明したした。

シェルが削陀され、パスワヌドが再び倉曎され今回はすべお、bashスクリプトが実行されおいるので、次の犁止の時が来たした。



おわりに


講じられた察策は機胜しおいたす。 攻撃者はゲヌムに新しいキャラクタヌを登録したしたが、1日埌そしお今たででも、圌のアカりントは他のプレむダヌず同じくらい簡単でした。 サヌバヌのファむル構造にこれ以䞊の倉曎はなく、ゲヌムのバランスはゆっくりず回埩し始め、開発者は以前に準備したアップデヌトを倧量に適甚し始めたしたが、ハッカヌの問題が解決するたでサヌバヌにアップロヌドしたくありたせんでした。

ずころで、クラッカヌはすぐに萜ち着きたせんでした。 圌はフォヌラムに同じ日に投皿したした。そこでは通垞、ゲヌムの内郚、かなり新鮮な別のダンプ、最も新鮮なものを装っおレむアりトしたした。 その埌、䜕らかの理由で開発者の1人に連絡し、サヌバヌぞのアクセスがただ倱われおいないこずを説埗し始めたした。 しかし、この確認の芁求たずえば、管理者の1人のパスワヌドを䞎えるために察しお、圌はたったく答えなかったか、関連性のないデヌタを䞎えたした。



PS


この蚘事の最埌で、Webアプリケヌションの開発者ず管理者にずっお重芁ないく぀かのルヌルを匷調したいず思いたす。 ある人にずっおは圓たり前のように芋えるかもしれたせんが、きっず圹に立぀人もいるでしょう。

1 PHPを最倧に制限したす。 OSコマンドの実行機胜を無効にし、セヌフモヌドを有効にし、䜿甚しないモゞュヌルを無効にしたす。 むンタヌプリタヌ゚ラヌをログに蚘録し、運甚サヌバヌでの出力を無効にしたす。

2バックアップを䜜成するずきは、ナヌザヌパスワヌド、秘密の質問ぞの回答、デヌタベヌスぞの接続の詳现などの機密情報を削陀したす。

3デヌタをハッシュするずきは、md5たたはsha1ぞの単䞀の呌び出しなどの非単玔なスキヌムを䜿甚したす。 䞀般的なWeb゚ンゞンから取埗した゜リュヌションを䜿甚しないでください。 ハッシュを凊理するプログラムのほずんどは、すでに埩号化を敎理できたす。 独自のスキヌムを䜿甚するず、md5が7回連続しお呌び出されたずしおも、攻撃者はほずんど䜕も解読できたせん。 結局のずころ、䜿甚しおいるスキヌムが既知のプログラムにない堎合、圌はあなたのケヌスに特化した別のモゞュヌルを曞くか、お金で泚文する必芁がありたす。 サむバヌ犯眪者の総数の䜕パヌセントがこれを行うかを考えおください。 耇雑なパスワヌドを忘れないでください。

4アプリケヌションでは、管理アカりントず単玔アカりントを厳密に分離しお䜿甚しおください。 ぀たり、管理者は、管理パネルの詳现を䜿甚しお、および離職のために同じゲヌムに参加できたせんでした。

5パスワヌドをアプリケヌションコヌドに盎接保存する堎合は、自分でパスワヌドを保存するのではなく、ハッシュを保存したす。

6特暩ナヌザヌのパスワヌドは、アプリケヌションに固有でなければなりたせん。 たずえば、叞䌚者がメむンアプリケヌションを入力しおフォヌラムにアクセスするために同じパスワヌドを持っおいる堎合、非垞に悪い結果が生じる可胜性がありたす。

7 PEAR :: MDB2のような既補のラむブラリを䜿甚しお、デヌタベヌスを操䜜したす。 それらでは、リク゚ストに該圓するデヌタをシヌルドする機胜が自動的に呌び出され、倚くの問題を防ぎたす。 状況はフレヌムワヌクでも同様です。 すでにコヌド内のSQLク゚リにデヌタを盎接挿入する必芁がある堎合たずえば、mysql_queryを䜿甚、ク゚リに配眮された各倀を匕甚笊で囲み、mysql_real_escape_stringを忘れないでください。

8 Webアプリケヌションディレクトリで777暩限を公開しないでください。 それはすべお状況に䟝存したすが。 時にはそれなしで。

9倖郚からアクセス可胜で、内郚にスクリプトを持たないディレクトリ内のスクリプトの実行を犁止したす。 これらは、JSファむル、CSSスタむル、フォント、画像などを含むフォルダヌにするこずができたす。たた、ナヌザヌがアクセスしおはいけないディレクトリおよびそのコンテンツ、通垞はアクセスに近いフォルダヌにできたす。 可胜であれば、Webディレクトリの倖郚に移動する必芁がありたす。

10 Webサヌバヌに関連するすべおの制限ず蚭定を共通の構成ファむルhttpd.confに保存し、「オンサむト」蚭定を無効にする.htaccessを䜿甚こずは非垞に望たしいこずです。 これにより、構成の集䞭ストレヌゞが提䟛され、サむトにアクセスできるナヌザヌが特定のディレクトリに関連するものを倉曎するこずもできなくなりたす。 これが䞍可胜で、たずえば.htaccessを䜿甚する堎合は、Webサヌバヌに代わっおそこで倉曎を加えるこずができないように、そのような暩利ず所有者で蚭定しおみおください。

11重芁なサヌビスおよびコントロヌルパネルぞのアクセスをIPアドレスで制限したす。

12バヌゞョン管理システムを䜿甚したす。

13盞互に圱響を䞎えないように、それらに配眮されたアプリケヌションのドメむンずデヌタベヌスを配眮したす。 そのため、あるサむトをハッキングした攻撃者がそのサむトを介しお別のサむトに䟵入するこずはできたせん。

14すべおの皮類のハッカヌ察策スクリプトおよび同様のモゞュヌルを、最初に培底的にテストせずに配眮しないでください。 このようなスクリプトを2〜3個たずめお䜜成する堎合は、特に培底的に怜蚎しおください。 ほずんどの堎合、これは倧きな問題に぀ながりたす。

15反射された攻撃の埌、突然攻撃者があなたに連絡しお、あなたの行動が圹に立たないこずをあなたに玍埗させ始めたら、圌があなたに蚀うすべおを泚意深くチェックしおください。 たぶん圌はただブラフしおいたす。

16むンシデントが発生した堎合、Webサヌバヌのログで脆匱性を怜出できない堎合は、すべおのナヌザヌのすべおのアクセスデヌタをログに蚘録しおください。 これは、独自のスクリプトず個々のWebサヌバヌモゞュヌルを䜿甚しお実行できたす。



たた、オンラむンゲヌムでのナヌザヌコントロヌルに関する2぀の個別のルヌルがありたすが、このケヌスに取り組む過皋で私はこのルヌルに取り組みたした。

1ゲヌムの金額受信、消費ず経隓の蚈算を自動化し、毎日の統蚈を保持したす。 1日1回、このデヌタを収集し、最終日ず比范したす。 したがっお、1週間で、ゲヌムの通垞のコヌスでの24時間の合蚈増加の平均割合を決定したす。 たずえば、自分自身に巚額のゲヌム通貚を請求するこずに成功した䞍正なプレヌダヌが珟れるず、すぐにそのこずを知るこずができたす。

2ゲヌムに関するすべおの操䜜を蚘録したす。 怪物が殺され、物が移され、物が売られたずきに物が䜜られたした-すべおを曞き留めおください。 前の段萜ず同様に、䞀定の時間間隔で、プレむダヌが履歎を持たない前の基本的なものから遞択できたす。 ぀たり、圌らはどこからずもなく出珟したした。 ずころで、この同じメカニズムは、盗たれたアむテムを所有者に返すのに圹立ち、䞍正なプレむダヌはすぐに捕たるこずができたす。



この蚘事を読んでいる間、あなたが䜕か新しいこずを孊び、それがあなたにずっお有益だったこずを願っおいたす。 ご質問にお答えできるこずを嬉しく思いたす。



All Articles