[JAVA] DB서버 id 및 password 암호화 처리(StandardPBEStringEncryptor)
ISMS인증심사를 위해 또 하나의 일거리가 추가되었다.
이번에 추가된 일거리는 DB접근 관련 설정 파일 내에 존재하는 id 및 password의 암화화 처리이다.
스프링프레임워크 applicationContext-jdbc.xml 파일을 열고 아래 내용을 추가한다.
■ resourcespringapplicationContext-jdbc.xml
## JDBC id/pw 암호화 : PBEWithMD5AndDES
‘<bean id=”encryptorConfig” class=”org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig”>
<property name=”algorithm” value=”PBEWithMD5AndDES” />
<property name=”password” value=”test@dsklfjdskf3″ />
</bean>’
‘<bean id=”encryptor” class=”org.jasypt.encryption.pbe.StandardPBEStringEncryptor”>
<property name=”config” ref=”encryptorConfig” />
</bean>’
‘<bean id=”propertyConfigurer” class=”org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer”>
<constructor-arg ref=”encryptor” />
<property name=”locations”>
<list>
<value>classpath:config/jdbc.properties</value>
</list>
</property>
</bean>’
##JDBC id/pw 암호화 : PBEWithMD5AndDES
##Load from JDBC properties
‘<util:properties id=”jdbcProperties” location=”classpath:config/jdbc.properties” />’
##Define of DataSource
‘<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”>
<property name=”driverClassName” value=”#{jdbcProperties.driverClassName}” />
<property name=”url” value=”#{jdbcProperties.url}” />
<property name=”username” value=”#{encryptor.decrypt(jdbcProperties.username)}” />
<property name=”password” value=”#{encryptor.decrypt(jdbcProperties.password)}” />
<property name=”maxActive” value=”#{jdbcProperties.maxActive}” />
<property name=”maxIdle” value=”#{jdbcProperties.maxIdle}” />
<property name=”maxWait” value=”#{jdbcProperties.maxWait}” />
<property name=”testWhileIdle” value=”#{jdbcProperties.testWhileIdle}” />
<property name=”testOnBorrow” value=”#{jdbcProperties.testOnBorrow}” />
<property name=”validationQuery” value=”#{jdbcProperties.validationQuery}” />
</bean>’
다음은 jdbc.properties 파일을 열고 username과 password의 암호화된 값을 기입한다.
■ /resource/config/jdbc.properties
username=ds;lfjksdlfj234kl4-023rN
password=sdkljflsdkfjweoir32=
이제 암호화된 값을 얻어보자.
■ 암호화 데이터 얻는 법
public static void main(String[] args) {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
standardPBEStringEncryptor.setAlgorithm(“PBEWithMD5AndDES”);
standardPBEStringEncryptor.setPassword(“UB$%CareHealth09Die~!”);
String encodedPass = standardPBEStringEncryptor.encrypt(“UB~!eVERheaTH%$+”);
String encodedPass2 = standardPBEStringEncryptor.encrypt(“well_app”);
System.out.println(“Encrypted Password for admin is : “+encodedPass);
System.out.println(“Encrypted UserID for admin is : “+encodedPass2);
//System.out.println(“Decrypted Password for admin is : ” + standardPBEStringEncryptor.decrypt(encodedPass));
//System.out.println(“Decrypted Password for admin is : ” + standardPBEStringEncryptor.decrypt(“sdfsdflj23l45j234923sdf480239=”));
//System.out.println(“Decrypted Password for admin is : ” + standardPBEStringEncryptor.decrypt(“ssdfdsfsdfsdfwer=”));
}
자바 스프링 프레임워크의 jdbc설정파일에 접근했다는 것은 운영중인 서버가 해킹되었음을 의미한다.
그래서 한편으로 이게 무슨 의미가 있나 생각해보았다.
서버가 해킹되었지만 id와 password가 암호화 되어있음으로 DB 서버에 접근은 불가할 것을 보여진다.
하지만 그것도 시간문제로 보인다. 해커는 얼마든지 암화화된 아이디와 패스워드를 복호화 할 수 있다.
설정 정보에 algorithm value 값과 password값이 존재하고 있으며, 어느 클래스파일을 디컴파일하면 암호화된 값을 복구 할 수 있기 때문이다.
그럼에도 불구하고 이렇게 처리하고 지시가 내려오는 것을 보면 해커가 운영중인 서버에 접근을 했다하더라도 DB서버의 접근에 대한 시간을 벌 수 있을 것으로 생각된다. 이건 뭐 지극히 나의 생각일 뿐이다.
ISMS인증심사는 매년 실시된다. 매년 새로운 보안처리 관련 이슈가 추가가 되며, 그에 맞게 개발자는 또 보안허점에 대해 대응해야한다. 개발자의 일은 끝이 없다.
나는 왜 개발자가 되었는가? 잘 바뀌지 않는 법을 공부했어야했나?
그래도 즐거움은 있다.