본문 바로가기
TOPCIT

정보보안 - SALT, 시큐어코딩

by suhsein 2024. 11. 12.
728x90

🧂SALT

정보보안에서 비밀번호에만 해쉬함수를 적용할 경우 레인보우 공격 등에 취약함

💡 SALT 값을 비밀번호에 덧붙여 해쉬함수를 적용하고, SALT값은 안전하게 보관

+) SHA-256 이상의 안전한 해쉬함수 적용 필요


🛡️시큐어코딩

안전한 소프트웨어 개발을 위해 소스 코드 등에 존재할 수 있는 잠재적인 보안 취약점을 제거하고, 보안을 고려하여 기능을 설계 및 구현하는 소프트웨어 개발 과정에서 지켜야 할 일련의 보안 활동

시큐어코딩 가이드 종류

  • 소프트웨어 개발 보안 가이드
  • JAVA 시큐어코딩 가이드
  • C 시큐어코딩 가이드
  • Android-JAVA 시큐어코딩 가이드

상대 디렉토리 경로 조작

외부의 입력을 통하여 “디렉토리 경로 문자열” 생성이 필요한 경우, 외부 입력 값에 대해 경로 조작에 사용될 수 있는 문자열을 필터링 하지 않으면, 예상 밖의 접근 제한 영역에 대한 경로 문자열 구성이 가능해져서 시스템 정보 누출, 서비스 장애를 유발할 수 있는 취약점

안전한 코딩 기법

외부의 입력이 직접 파일 이름을 생성하는 것을 막음

불가피할 경우 다른 디렉토리의 파일 접근을 할 수 없도록 replaceAll()등의 메소드를 사용하여 위험 문자열 (”,/,)을 제거(빈 문자열로 대체). 외부 입력을 받아들이되, 내부적인 처리는 미리 정의한 데이터를 사용하도록 하며, 미리 정의된 케이스를 제외하고는 모두 무시

Null 포인터 역참조

Null 포인터 역참조(코드 오류)

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();
    }
    ......
}
728x90