2016-06-01 5 views
0

私は明白な何かを見ていないかどうかわかりません...私は安全なコーディングのためにこれらの勧告を読んでいました:http://www.javaworld.com/article/2076837/mobile-java/twelve-rules-for-developing-more-secure-java-code.htmlクラスが最終的でない場合にJavaの脆弱なコードを利用する方法、クローンされることを許可するなど

最終的にクラスやメソッドが宣言されていない場合は、攻撃者がバイトコードでオーバーライドまたは拡張する可能性があるので、自分自身の悪意のあるコードをバイトコードに配置することができますが、完了することができます。

public class TheClass { 
    public void someAction(char[] userPassword) { 
     //some action 
    } 
} 

public class Program { 
    public static void main(String[] args) { 
     TheClass theClass=new TheClass(); 
     theClass.someAction(readPasswordFromUserInput()); 
    } 
} 

と、攻撃者が別の悪質なクラスを作成します:

public class TheMaliciousClass extends TheClass{ 
    public void someAction(char[] userPassword) { 
     //some action 
     //some malicious action 
     //send password to attacker's website 
    } 
} 

我々はプログラムを持っている場合、私は、例えば...プログラムではなく、元の1の拡張クラスを使用するようにする方法を、意味しますどのようにプログラム、ユーザー、または何かをトリックする必要がありますので、TheClassの代わりにTheMaliciousClassを使用しますか?たぶん、私はポイントを得られなかったし、攻撃は他の方法で行われます...とにかく、私は何か説明を感謝します。どうもありがとう!!

OWASPに彼らはまた、「finiality」で、このセキュリティ上の欠陥について話:https://www.owasp.org/index.php/Java_leading_security_practice

答えて

1

その記事では、私はそれらのルールのいくつかのビット不審なんだ1998年からです。 CERT Java Secure Coding Guidelinesのように、各ルールの脆弱性と正しい修正方法を明確に説明した方が良いでしょう。

更新: 元のソースとコメントに追加したソースがあいまいな一般化をしているという問題があります。コメントで参照したソースには、「あなたが正当な理由がない限り、クラスを最終的にする」(つまり、クラスを非最終的にする正当な理由がある)というメッセージが表示されます。そして、静的解析ツールが "このクラスは拡張可能でなければならない"と "このクラスは拡張可能ではない"ということを理解する方法はありません。

基本的には、問題の根本に問題があります。クラスをインスタンス化して使用する方法を制御する場合、攻撃者がクラスを拡張することができますか?あなたが推測したように、彼らはできません!攻撃者が独自にクラスをインスタンス化し、機密アプリケーションコードに渡すことができれば、問題になる可能性があります。

このうち、これらの推奨事項は特定の状況にのみ適用されることを理解する必要があります。攻撃者が実行中のコードに直接アクセスできない場合、この推奨事項はあなたとは無関係です(たとえば、Webアプリケーションを作成している場合)。攻撃者が実行中のコードに物理的にアクセスできる場合は、jvmで必要な操作を行うことができるため、他のものはおそらく無関係です。この拡張性の推奨が意味を成すことができるのは、実行中のアプリケーションにサードパーティがコードを注入し、アプリケーションがSecurityManagerの下で実行されているアプリケーションだけです。それがあなたの状況ではないなら、あなたはこの勧告を無視することができます。

結局のところ、セキュリティの推奨事項の多くは微妙なものであり、コードについて合理的な判断を下すためには、この問題を理解する必要があります。これらのニュアンスのある推奨事項については、静的分析は、あなたが考える必要のあるクラスがあるという事実に注意を喚起すること以外にはほとんどありません。

+0

リンクをありがとう。私は更新された静的コード分析ツールを実行し、最終的に非常に危険なものとして宣言されていないすべてのクラスにマークを付けました。私はOWASPのhttps://www.owasp.org/index.php/Java_leading_security_practice(2010)のように、同じことを述べている多くの記事を読んでいます。 Gary Mcgrawに加えて、セキュリティ上非常に重要な人物であり、どこにでもJavaが何らかの形でそれを修正したように見えます... – Samuel

+0

@ Samuel - もう少し文脈を追加しました。 – jtahlborn

関連する問題