정보보안에서 비밀번호에만 해쉬함수를 적용할 경우 레인보우 공격 등에 취약함
💡 SALT 값을 비밀번호에 덧붙여 해쉬함수를 적용하고, SALT값은 안전하게 보관
+) SHA-256 이상의 안전한 해쉬함수 적용 필요
안전한 소프트웨어 개발을 위해 소스 코드 등에 존재할 수 있는 잠재적인 보안 취약점을 제거하고, 보안을 고려하여 기능을 설계 및 구현하는 소프트웨어 개발 과정에서 지켜야 할 일련의 보안 활동
외부의 입력을 통하여 “디렉토리 경로 문자열” 생성이 필요한 경우, 외부 입력 값에 대해 경로 조작에 사용될 수 있는 문자열을 필터링 하지 않으면, 예상 밖의 접근 제한 영역에 대한 경로 문자열 구성이 가능해져서 시스템 정보 누출, 서비스 장애를 유발할 수 있는 취약점
외부의 입력이 직접 파일 이름을 생성하는 것을 막음
불가피할 경우 다른 디렉토리의 파일 접근을 할 수 없도록 replaceAll()등의 메소드를 사용하여 위험 문자열 (”,/,)을 제거(빈 문자열로 대체). 외부 입력을 받아들이되, 내부적인 처리는 미리 정의한 데이터를 사용하도록 하며, 미리 정의된 케이스를 제외하고는 모두 무시
Null 포인터 역참조 ‘일반적으로 그 객체가 Null이 될 수 없다’라는 가정을 위반할 때 발생하는 취약점으로 그 결과로 발생하는 예외사항을 추후 공격을 계획하는데 사용됨
Null이 될 수 있는 레퍼런스는 참조하기 전에 널 값인지 검사하여 안전한 경우만 사용
C언어에서는 포인터를 이용하는 경우 반드시 해당 포인터가 null인지 검사
// 시큐어 코딩이 지켜지지 않은 코드
......
public void f(Properties request){
......
String name = request.getProperty("filename");
if(name != null && !"".equals(name)) {
File file = new File("/usr/local/tmp/" + name);
//외부로부터 입력된 파일 명(name)이 검증없이 삭제할 파일의 경로 설정에 사용되고 있어
//의도하지 않았던 파일이 삭제되어 시스템에 악영향을 줄 수 있다.
file.delete();
//삭제하려는 해당 파일이 존재하는지 즉, null 체크를 하지 않아
//Null Pointer Exception이 발생할 수 있다.
}
......
}
// 시큐어 코딩이 지켜진코드
......
public void f(Properties request){
......
String name = request.getProperty("filename");
if(name != null && !"".equals(name)) {
name.replaceAll("/", "");
File file = new File("/usr/local/tmp/" + name);
if(file != null) file.delete();
}
......
}