
가. 원인 - 사용 후 반드시 자원해제해야 하는 메모리 / 파일 / DB연결 / 소켓 등의 유한한 자원이 사용이후 반환되지 않을 경우 나. 영향 - 해제하지 않은 자원이 고갈되어 더 이상 할당할 수 없는 상태 - 자원해제 코드가 잘못된 루틴에 존재하여 시스템 오류 발생 다. 보안대책 - 유한한 자원은 반드시 반환되도록 제어문이나 예외처리를 작성 - 자바의 경우 반환코드는 finally 블록에 구현하여 반드시 실행되도록 작성 라. 안전한 코드 1. finally 구문에서 자원해제 ... PrintWriter out = null; try { out = new PrintWriter( new FileWriter( "/read.txt" ); ... } catch (IOException e ) { ... } cat..

가. 원인 - 객체가 Null이 될 수 없다는 가정이 위반되었을 경우 발생 - Null로 설정된 참조변수를 참조하는 경우 나. 영향 - Null Pointer 역참조를 통해 발생되는 예외사항을 이용하여 추후 공격에 활용 다. 보안대책 - Null이 될 수 있는 참조변수를 사용하기 전 Null인지 여부를 검사 후 사용 라. 안전한 코드 1. Null Pointer 검사 후 사용 ... String user_id = request.getParameter("userID"); if ( user_id == null ) { showAlert( "Input User ID" ); break; } else { UserInfo objUserInfo = getUserInfo( user_id ); ... if ( objUse..

가. 원인 - 여러 개의 코드에 하나의 try 블럭을 설정하여, 모든 예외에 대해 하나의 방식으로 예외를 처리하는 경우 나. 영향 - 각각의 예외처리에 대해 적절한 대응이 불가 - 부적절한 리소스 관리로 시스템 중지 초래 - 예외 상황에 대한 적절한 로깅이 되지 않아 사후처리가 어려움 다. 보안대책 - 광범위한 예외처리 대신 구체적인 예외처리를 수행 - 각각의 예외 상황에 맞춰 적절한 예외 처리를 수행하도록 구현 라. 안전한 코드 1. 구체적 예외처리 BufferedReader rd = null; try { rd = new BufferedReader( new FileReader( new File( fileName ) ) ); String line = rd.readine(); SimpleDateFormat..

가. 원인 - 프로그램에서 발생한 오류에 대해 어떠한 조치도 수행하지 않아 비정상적인 상태로 실행되는 경우 나. 영향 - 개발자가 의도하지 않은 방향으로 프로그램이 동작 - 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. ..
- Total
- Today
- Yesterday