가. 원인 - 프로그램에서 발생한 오류에 대해 어떠한 조치도 수행하지 않아 비정상적인 상태로 실행되는 경우 나. 영향 - 개발자가 의도하지 않은 방향으로 프로그램이 동작 - DB연결 상태에서 예외 발생 시 열결해제 작업이 제대로 수행되지 않을 경우, DB연결을 수행할 수 없음 - 예외 상태에 대한 로깅정보가 존재하지 않을 경우, 오류 상황에 대한 사후처리가 어려움 다. 보안대책 - 오류가 발생할 수 있는 부분에 대해 적절한 예외처리를 구현 - Exception 발생 시 특별히 수행할 작업이 없을 경우, 간단한 메시지라도 로그로 기록 라. 안전하지 않은 코드 1. 안전하지 않은 오류처리 try { String strCnt = request.getParameter( "count" ) int count = I..
가. 원인 - 실행환경 / 사용자 등과 관련된 민감정보를 포함한 오류 메시지를 생성 및 외부에 출력 시 - Exception 발생 시 Exception 정보를 출력 시 나. 영향 - 공격자는 오류 메시지를 통해 공격에 활용될 수 있는 상세 오류 정보를 확인 - 공격자가 프로그램 내부구조를 쉽게 파악 다. 보안대책 - printStackTrace() 메서드를 사용하지 않도록 로직구현 - 오류 메시지를 유용한 최소한의 정보만 포함하여 사용 - Exception 발생 시 내부적으로 처리하고, 민감정보를 포함한 오류는 출력하지 않도록 미리 정의한 메시지를 제공 라. 안전한 코드 1. 최소정보 로깅 try { rd = new BufferedReader( new FileReader( new File( fileNam..
가. 원인 - 재귀함수의 순환횟수를 제어하지 않아 자원을 과다하게 사용하는 경우 나. 영향 - 귀납조건 없이 재귀함수를 호출하여 무한루프에 빠짐 - 자원고갈을 유발하여 정상 서비스 불가 다. 보안대책 - 재귀함수 사용 시 호출횟수를 제한 라. 안전한 코드 1. 재귀함수 종료조건 int factorial( int num ) { // 팩토리얼 계산을 위한 재귀함수의 종료조건 적용 if ( num
가. 원인 - 병렬실행 환경에서 공유자원의 검사시점과 사용시점의 공유자원의 상태가 달라 오작동을 일으키는 경우 나. 영향 - 프로그램이 교착상태 발생 - 경쟁자원의 변조나 삭제 등을 통해 동기화 오류 발생 다. 보안대책 - 경쟁자원에 여러 스레드가 접근 시 동기화 사용 - 동기화 구문(Synchronized)을 이용하여 한번에 하나의 스레드만 접근하도록 구현 - 동기화 구문은 임계코드 주변에만 적용 라. 안전한 코드 1. 동기화 구문 사용 class FileManager extends Thread { private static final String SYNC = "SYNC"; private String mode = "READ"; public FileManager( String mode ){ this.mo..
가. 원인 - 일정시간 내 여러번의 인증실패 시 계정잠금 또는 추가인증이 충분하지 않을 경우 나. 영향 - 무차별 대입 인증시도 등을 통해 로그인 및 권한획득 다. 보안대책 - 인증로직 구현 시 인증시도 횟수를 제한 - 인증실패 초과 시 계정잠금 또는 추가 인증과정을 수행 라. 안전한 코드 1. 인증시도 횟수제한 ... String loginID = request.getParameter( "id" ); String loginPW = request.getParameter( "pass" ); ... // 인증 처리 전 현재 실패횟수를 체크 // 5회 이상 실패 시 계정잠금 int loginFailCnt = dbms.getLoginFailCnt( loginID ); if ( loginFailCnt >= 5 )..
가. 원인 - 원격으로 소스코드나 실행파일을 다운로드 후 무결성 검사없이 사용할 경우 나. 영향 - 호스트 파일을 변조하여 DNS 스푸핑 - 악성코드가 삽입된 소스코드를 실행 - 변조된 데이터를 사용하여 의도하지 않은 결과를 유발 다. 보안대책 - 안전한 암호화 기법을 적용 후 전송 및 사용 시 복호화 - 최소한의 권한으로 다운로드한 코드를 실행 라. 안전한 코드 1. 안전한 암호화 적용 1. 파일생성 String jarFile = "./download/util.jar"; byte[] loadFile = FileManager.getBytes( jarFile ); // 개인키로 파일을 암호화 loadFile = encrypt( loadFile, Encrypt.PRIVATE_KEY ); FileManager..
가. 원인 - 일방향 해쉬 함수를 사용할 때 솔트를 적용하지 않은 경우 나. 영향 - 레인보우 테이블 등을 통해 모든 해쉬값을 미리 계산하여, 암호문의 원문을 추출 다. 보안대책 - 해쉬 값을 생성할 때 반드시 솔트를 적용 라. 안전한 코드 1. 솔트 적용 public String getPasswordHash( String password, byte[] salt ) { MessageDigest md = MessageDigest.getInstance( "SHA-256" ); md.reset(); md.update( salt ); String result = md.digest( password.getBytes() ); return result; } 마. 진단방법 1. 해쉬함수 사용하는 소스코드를 확인 2. ..
가. 원인 - 주석문 안에 시스템 중요정보가 작성되어 있는 경우 - 개발과정에서 개발편의상 중요정보를 포함하여 작성한 주석을 삭제하지 않은 경우 나. 영향 - 바이너리 파일의 디컴파일을 통해 중요정보가 유출 - 유출된 정보를 기반으로 시스템 공격 다. 보안대책 - 주석문에 계정정보 등의 중요정보를 작성하지 않음 - 개발완료 시 개발에 사용한 계정정보 등의 중요정보를 확실하게 삭제 라. 안전하지 않은 코드 1. 주석문 내 중요정보 ... // 관리자 계정 ( admin / admin1234 ) if ( !checkLogin( this.ID, this.PASS ) ) { showAlert( "Not Allow Login" ); return; } ... 마. 진단방법 1. DB접속, 관리자 로그인 등이 구현된..
가. 원인 - 개인정보 / 인증정보 / 금융정보와 같은 중요정보를 영속적인 쿠키에 저장하는 경우 나. 영향 - 쿠키에 저장된 중요정보 유출 및 변조를 통해 사용자 권한 / 인증을 우회 다. 보안대책 - 쿠키 만료시간을 최소한으로 설정 - 영속적 쿠키(Max-Age)에 사용자 권한등급, 인증정보 등의 중요정보를 포함 제외 라. 안전한 코드 1. 쿠키 만료시간 설정 ... if ( !checkLogin( this.ID, this.PASS ) ) { showAlert( "Not Allow Login" ); return; } ... String saveID = request.getParameter( "save_id" ); Cookie loginCookie = new Cookie ( "save_id", saveI..
가. 원인 - 비밀번호 조합규칙이 미흡하거나 길이가 충분하지 않을 경우 나. 영향 - 패스워드 무작위 대입 또는 추측공격을 통해 계정정보가 노출 다. 보안대책 - KISA "암호이용안내서"의 패스워드 설정규칙을 적용 - 패스워드에 숫자 / 영문자 / 특수문자 등을 혼합하여 사용 - 패스워드를 주기적으로 변경하여 사용 라. 안전한 코드 1. 패스워드 검증 String password = request.getParameter( "password" ); ... // 영문+숫자포함하여 최소 10자리 이상 Pattern p = Pattern.compile( "((?=.*[a-zA-Z])(?=.*0-0).{10, })" ); Matcher match = p.matcher( password ); if ( !match..
- Total
- Today
- Yesterday