
この質問はUnixとLinuxに固有のものです。しかし、これはプログラミングとセキュリティに関するものです。
私のプログラムは、いくつかの方法(パスワードファイルの復号化、プロキシ要求など)のいずれかで明示的なパスワードまたは復号化キーを取得し、スワップスペースを使用した後にメモリから削除される前にスワップスペースに書き込めないことを確認したいと思います。 。私はこれが交換不可能なアドレス空間を得ることを意味すると思います。しかし、これには通常root権限が必要であり、私のプログラムはrootではなくユーザーとして実行する必要があります。 Unixで移植可能ですか? Linuxに希望がありますか?
スワップスペースなしでシステムを構成することはオプションではありません。プログラムユーザーにはそのような権限がない可能性があるため、システムをより安全にすることができますが、すべてのシステムでこれを行うことはできません。
私はこれを行うことができます部分Cからしかし、これをPython3でも実装することをお勧めします。
できますか?ルートではないプロセスが一部交換されていないページを取得します。安全のため?
このプロセスが中断されるのを防ぎますか? 取引所に明確なパスワードを書くよりも出る方が良いです。
答え1
Linuxでmlockを使用するhttp://linux.die.net/man/2/mlock
mlock() および mlockall() は、それぞれ呼び出しプロセスの仮想アドレス空間の一部または全部を RAM にロックするため、このメモリがスワップ領域にページングされるのを防ぎます。
マニュアルページに詳細があります。
答え2
私は決してセキュリティ専門家ではないということから申し上げたいと思います。
Python部分の場合、ctypesを使用してmlockをPythonにラップするのは難しくないようです。 mlockのmanの制限と権限セクションを見ると、一般ユーザーは限られた量のメモリをロックできるように見えます。私のシステムで実行されるものはパスワードを保存するのに十分uname -a
ですmax locked memory (kbytes, -l) 64
(しかしオーバーフローに注意する必要があります)。
休止状態ではこの信号を処理できませんが、SIGSTOP
システムが正常な場合は受信できますSIGTSTP
(参照)。[Linuxではプロセスを一時的に停止できますか?])。SIGSTOP
受け取るだけ【メモリに保存されたパスワードは安全です】ディスク暗号化を使用しないと、運命が決まっていると言うように、これは効率的な解決策ではないかもしれません。ただし、処理によって違反が見つかる可能性がありますが、遅すぎる可能性がSIGCONT
あります。