JBoss 6 Datasourceデータソース暗号解読メカニズム

8167 ワード

一、JBossの下でデータソースを配置する時、パスワードが直接システムのオペレーターあるいはメンテナンス人員に露出した場合、明らかにデータベースの安全でない要素を増加した.
MySQLデータソース構成サンプル











  
  
  
  
    
  


  
    MSSQLDS
    jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase
    com.microsoft.sqlserver.jdbc.SQLServerDriver
    admin
    password
        
    

    

    
    
        MS SQLSERVER2000
    
  


心配しないで、JBoss自身はパスワードを暗号化するツールorgを提供した.jboss.resource.security.SecureIdentityLoginModule
Windowsでは、パスワードの暗号化文字列を次のコマンドで取得できます.
D:\JBoss\jboss-6.1.0.Final>java -cp client\jboss-logging.jar;lib\jbosssx.jar org.jboss.resource.security.SecureIdentityLoginModule password

Encoded password: 5dfc52b51bd35553df8592078de921bc

二、暗号化されたパスワードを入手すれば暗号化できるデータソースの配置
1.MySQLデータソースの構成











  
  
  
  
    
  


  
    MSSQLDS
    jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase
    com.microsoft.sqlserver.jdbc.SQLServerDriver
    
    
    EncryptDBPassword
    
    
    

    

    
    
       MS SQLSERVER2000
    
  


2.login-configを構成する.xml(通常はsrcmainresourcesMETA-INFディレクトリの下に置く)




	
	
		
			
				admin
				5dfc52b51bd35553df8592078de921bc
				jboss.jca:service=LocalTxCM,name=MSSQLDS
			
		
	

3.jboss-serviceを構成する.xml(一般的にはsrcmainresourcesMETA-INFディレクトリの下に置かれています.EJBでDynamicLoginConfigを実現していますが、より便利な案を提供してほしいです)


	
		META-INF/login-config.xml
		
		jboss.security:service=XMLLoginConfig
		
		jboss.security:service=JaasSecurityManager
	

三、最後にJBoss暗号化ツールの暗号化を解読するパスワードを紹介します
1.SecureIdentityLoginModuleのあるパッケージD:JBossjboss-6.1.0を見つける.Final\lib\jbosssx.jar
見つけたclass、逆コンパイルで全部わかりました
暗号化は、private static String encode(String secret)を使用します.
自然復号化:private static char[]decode(String secret)
注意:逆コンパイルツールJDGUIを推奨
2.Eclipseでパッケージを新規作成
org.jboss.resource.Security,新規
SecureIdentityLoginModule.JAvaと
PasswordDecoder.java SecureIdentityLoginModule.JAva(このクラスはPasswordDecoderコンパイルを通過させるためだけで、実際の意味はありません)
package org.jboss.resource.security;

public class SecureIdentityLoginModule {
	private static String encode(String secret) {
		return secret;
	}

	private static char[] decode(String secret) {
		System.out.println("Input password: " + secret);
		return new char[] { '0', '1', '2', '3', '4', '5' };
	}
}

PasswordDecoder.JAva(利用
反射呼び出しSecureIdentityLoginModuleのprivate static char[]decode(String secret)メソッド)
package org.jboss.resource.security;

import java.lang.reflect.Method;

/**
 * Decode the encoded password.
 * 
 * @author     
 * 
 */
public class PasswordDecoder {
	public static void main(String args[]) throws Exception {
		Class cla = SecureIdentityLoginModule.class;
		Method m = cla.getDeclaredMethod("decode", String.class);
		m.setAccessible(true);

		Object obj = m.invoke(null, args[0]);
		char[] chars = (char[]) obj;

		System.out.println("Decoded password: " + new String(chars));
	}
}

3.コンパイルされたPasswordDecoder.classはD:JBossjboss-6.1.0に置く.Final\lib\jbosssx.JAr中orgjbossresourcesecurity下(悪いことをする前にバックアップ)
4.復号
Windowsでは、暗号文の復号文字列を次のコマンドで取得します.
D:\JBoss\jboss-6.1.0.Final>java -cp client\jboss-logging.jar;lib\jbosssx.jar org.jboss.resource.security.PasswordDecoder 5dfc52b51bd35553df8592078de921bc

Decoded password: password

転載は出典を明記してください.http://blog.csdn.net/w709854369/article/details/7642503