web-dev-qa-db-ja.com

プログラムのOriginコンピュータを特定できますか?

私はいくつかのプラットフォームと言語でプログラムを開発していますが、プログラムが開発されたOriginコンピュータを誰かに発見してほしくありません。誰かがそれを発見できる方法はありますか?

15

ソースコードは一連のテキストファイルで構成されています。テキストファイルの内容は、テキストエディタが表示するものとまったく同じなので、「視覚的に」制御できます。 リビジョンコントロール CVSやSubversionなどのシステムに注意してください。ソースコード内の特定のタグ(「$Id$」など)を、現在の日付と時刻を含む識別文字列に自動的に置き換えることができます。 、ログイン名、その他の情報-この機能はトレーサビリティに優れていると考えられますが、特定のケースではこの機能を望まないことを理解しています。

コンパイル済みコードはかなり別のものです。一部のコンパイラは、実行可能構造の「コメント」フィールドとして、リビジョン管理ソフトウェアが行うように、識別文字列を自動的に追加します。これは意図的なスパイ装置である必要はありません。トレーサビリティは本当に一般的なケースで良い考えです。政府にコンパ​​イラ開発者に賄賂を渡して、プログラマをスパイするためにコンパイラにそのようなものを追加することを想像する必要はありません。また、実行可能形式には、いくつかの「空白」が含まれていることがあります。これは、アライメントの理由で追加された未使用の部分です。コンパイラは、RAM atこれは古いバージョンの lcc-win32 で発生したため、RAMの内容のランダムな抜粋が書き込まれていましたcould機密情報が含まれています(これはlcc-win32で修正されたと思いますが、他のツールセットでも発生する可能性があります)。

他のファイル形式も一部の情報を埋め込む(したがってリークする)可能性があります。たとえば、PNG画像には「コメント」を含めることができます(これにより、画像の視覚的側面が変更されることはありません)。 [〜#〜] gimp [〜#〜] 、画像操作プログラムはコメントフィールドを使用して、画像処理に関与したことを示します。どのツールでも、あなたの見解ではそれほど害のない情報を追加することができます。

多くの潜在的なリークは、ファイルをテキストのように見ることにより、視覚的に検出できます。ただし、これは、ツールの1つに自発的にバグが発生し、出力に有罪の証拠が含まれる可能性をカバーしていません(そのようなトレース情報は、どこを見るかを知っている人を除いて、「ランダムに見える」ように暗号化されます)。

世界の国々にとって残念なことに、「私の国の革命」はあまり正確な指標ではありません。現在、アフガニスタン、イエメン、シリア、ソマリア、リビアの一部、コロンビア、スーダン、サハラ南部などを含むがこれらに限定されないかなりの国々で武力反乱または同様の騒乱が起こっています。エジプト、イラク、イランでは、記憶から思い浮かぶことのできるものをいくつか含めるだけで、状況は完全に明確ではありません。

24
Tom Leek

コンピューターのファイルとシステムから情報を抽出することに専念する全体的な規律があります: computer forensics

コンピューターファイルは、匿名にするのが比較的簡単です。つまり、ネットワークトラフィックはタイミングを通じて多くの情報を伝達するのに対し、ファイルは単なるビットの束です。絶対的なスケールでは、重要なファイルの匿名性を実行することはそれほど簡単ではありません。

最初に確認することは、コメントを除いて、ソースファイルに識別情報がないことです。コメントはほとんど安全ですが、デバッグ情報に表示される可能性のある行番号に影響を与えます(例:__LINE__ in C)。特に Tom notes のように、ソースファイルにRCSタグなどがないことを確認してください。関数、変数、クラス、ソースファイルなどにも非常に一般的な名前を使用してください。これらの多くは実行可能ファイルに組み込まれるためです。

コンパイラーは、ありふれたコードをさまざまな方法でコンパイルおよび最適化するので、十分にやる気のある審査官によって、高い成功率で識別できます。したがって、非常に一般的なコンパイラを使用してください。プログラムがリンクされているすべてのライブラリにも同じことが当てはまります。

次に、いくつかの基本的なテストを行います。同じコンパイラバージョンの複数のマシンで同じプログラムをコンパイルし、結果がビットごとに同一であることを確認します。マシンがコンパイラーやライブラリー(OSバージョンの違い、ユーザー名の違い、言語設定の違いなど)を除いて可能な限り異なる場合、テストはより確実になります。

UNIXシステム(Linux、WindowsのCygwinなど)では、バイナリでstringsコマンドを実行して、印刷可能な部分文字列を見つけます。これは単なる基本的な健全性チェックであり、潜在的に有害な情報をすべてカウントして見つけることはできません。たとえば、UTF-16(WindowsおよびJavaで使用)などのマルチバイト文字セットでエンコードされた文字列は見つかりません。

可能であれば、フラグを立てない無邪気に見えるプログラムと、機密データを含む小さなテキストファイルの間でプログラムを分離するようにしてください。異なるチャネルを介して2つを配布します。さらに、プログラムを小さなテキストファイルにするように調整してください。理想的には、一般的なインタプリタ言語を使用し、プログラムソースのみを配布します。ただし、独自の作業ソースを配布しないでください。コメントや機密変数名などを含まないサニタイズされたソースを配布してください。

プログラムを配布するときに、Zipやtarなどのアーカイブ形式を使用することを決定する場合があります。これらのアーカイブにはファイルの日付が保存され、一部のアーカイブ形式(tarなど)ではユーザー名を保存できることに注意してください。

完全な匿名性というものはありませんが、1人でプログラミングするのに十分な匿名性を実現することは可能だと思います。あなたの最大の心配は配布です。バイトを移動しているときに匿名のままでいることは非常に難しく、人とやり取りを開始するとさらに少なくなります。 Tor の使用は役立ちますが、特に政府のリソースを持つ迎撃者に対しては 魔法の弾丸ではありません です。

(特に、この質問は追跡可能かもしれません。特に、すべてのインターネットアクセスに政府のフィルターが適用されている国に住んでいる場合は、インターネットアクティビティをStack Exchangeとのやり取りに関する公開情報と関連付けることができます。)

あなたがプログラムを書いたコンピュータや、それをコンパイルしたプログラムを誰かがたどる方法は知りません。

ただし、より安全にしたい場合は、他のシステム(Amazon EC2や仮想プライベートホスティングサービスなど)のコンピューティングリソースへのアクセスを購入し、そこでプログラムをコンパイルすることもできます。また、念のため、バイナリを「ストリップ」して、すべてのデバッグシンボルを削除します。あなたがたどることができない方法でアクセスを取得することができる場合、それがコンパイルされたコンピューターを特定するためのクレイジーな方法があったとしても、あなたのアイデンティティに直接リンクすることはできません。おそらく、ここの人々は、身元を明かさずに、あるマシンでリモートシェルアクセスを取得する(または仮想マシンを実行する)方法を提案できます。

2
D.W.