読んだ後に燃やす

前学期、 Mail.Ru Technoparkの情報セキュリティコースの宿題として、ワンタイムリンクサービスの作成を依頼されました。 同様のサービスはすでに存在しますが、このアイデアは、実用的なアプリケーションの観点と技術的な実装の観点の両方から私にとって興味深いものでした。 タスクを完了し、システムをわずかに変更して、パブリックドメインに投稿しました。 この短い記事で、私が解決しなければならなかった問題と、私が遭遇した問題について話します。







私たちは何について話しているのですか



したがって、 secureshare.pwは1回限りのリンクサービスです。 機密データを他の人に安全に転送する手段。 一番下の行は、ユーザーのシークレットデータがサーバーのデータベースに保存され、このデータが利用できるワンタイムリンクがユーザーに提供されることです。 リンクは、データが破棄された直後の1つの(デフォルト)ビューに対してのみ有効です。 リンクがIMサーバーのメッセージ履歴、送信されたレターのリスト、サーバーのアクセスログ、モニターのスクリーンショットに残ることを恐れることはできません。 攻撃者がこのリンクに到達するまでに、それは無意味になります。



最初のアプローチ



システムの基本的な機能は非常にシンプルです。 必要なのは、フォームからデータベースにデータを保存し、このデータを一意に識別するリンクをユーザーに提供することです。 たとえば、主キーをgetパラメーターに追加します。 データを表示した後、基本的なDELETEリクエストを実行すれば完了です。 最初のアプローチの後、システムはまったく同じように機能しました。



しかし、どういうわけか、これは深刻ではありませんか?







第二のアプローチ



さて、ここで何が悪いのか考えてみましょう。 最初に目を引くのは、リクエストのgetパラメーターの主キーです。 つまり、すべての数字を順番に並べると、他の人の秘密をたくさん拾うことができます。 解決策は非常に明白です-数字を使用する代わりに、大きくて選択できないものを使用してください。 sha1ハッシュ(たとえば、衝突はmd5で見つかったため、使用することはお勧めしません)としましょう。 さて、データベースに新しいフィールドを追加し、UNIQUEインデックスを作成して、新しいユーザーシークレットごとにランダムに生成します。 すでに良い。



第三のアプローチ



データベース内のデータは、開いたフォームに保存されます。 どういうわけか、それは秘密です。 データベースがリークした場合、攻撃者はすべての秘密を入手できます。 どうする プレイテキストにデータを保存しないでください! それらを暗号化しましょう。 強力な対称ブロック暗号化アルゴリズムを選択します。通常、メッセージの量は少ないため、データを表示する際にデータをその場で復号化します。 データベースがリークしている場合、攻撃者は必要なデータを取得するために汗をかく必要があります。 悪くない。 しかし、深刻な「しかし」があります。 多くの場合、結局、ハッカーはシステムにまったくアクセスできないか、完全なアクセス権を持っています。 暗号化キーを含む復号化サービスのソースコードを含めると、彼が持っているすべてのデータが完全に表示されます-「1つ残った」データを復号化することが可能になります。 暗号化もあまり意味がないことがわかりました。 どうする







4番目のアプローチ



各ユーザーメッセージは、ランダムに生成されたキーで暗号化されます。 暗号化後、キーは2つに分割され、そのうちの1つは暗号化されたデータとともにデータベースに格納され、残りの半分はクライアントに提供されるリンクに埋め込まれます。 その結果、データはキーの半分だけで復号化できることがわかりました。 したがって、データベースは一般にパブリックドメインに配置でき、システムのアルゴリズム全体を完全に公開できます。クライアントのリンクにキーの後半がなければ、データベースのデータはごみの塊です。 いいね!







5番目と最後のアプローチ



すべてが良いようです。 名前を考え出し、適切なドメインを登録します。 彼らはsecureshare.pwになりました。

最後の詳細:オープンHTTPプロトコルを使用して深刻なことを推進することは価値がありません。 HTTPSが必要です。 最初のステップは簡単です-HTTPの使用を許可せず、サーバーでHTTPSをセットアップした後、ポート80から443にリダイレクトするよう強制されます。 動作します。 しかし、コーナーには、ドメインの真正性が検証されていないことを示す真っ赤な碑文があり、Chromeにはred敬の念を起こして赤い(新しいバージョンでは黄色の)警告画面が表示されます。







良くない ルート証明機関の1つが身元を確認する必要があります。 検索エンジンでのクエリ-さまざまな企業からの多くのオファーが見つかります。 私はGoDaddyを選びました-受け取りと十分なお金のためのあまり複雑な手順ではありません。 スタートアップに適しています;-)

最後の仕上げとして、データベースからリンクが削除される前のインプレッション数(デフォルト= 1)、表示されなかった場合でもリンクが自己破壊する日付(毎日kronskript)、および表示確認(不注意による表示およびデータ破壊からの保護)。



できた! 私たちは、新しく生成されたパスワード、パスポートデータ、その他の機密情報を友人や同僚に送信できる信頼性の高いサービスを提供しています。



いつものように、Wellcomeへの質問と提案。 ご清聴ありがとうございました!



この記事は、 Mail.Ru Technoparkプロジェクトの学生向けのコンテストの一環として書かれました。



All Articles