
가. 원인 - 주석문 안에 시스템 중요정보가 작성되어 있는 경우 - 개발과정에서 개발편의상 중요정보를 포함하여 작성한 주석을 삭제하지 않은 경우 나. 영향 - 바이너리 파일의 디컴파일을 통해 중요정보가 유출 - 유출된 정보를 기반으로 시스템 공격 다. 보안대책 - 주석문에 계정정보 등의 중요정보를 작성하지 않음 - 개발완료 시 개발에 사용한 계정정보 등의 중요정보를 확실하게 삭제 라. 안전하지 않은 코드 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..

가. 원인 - 암호키가 소스코드에 하드코딩되어 암호화에 사용 나. 영향 - 실행파일이 유출 시, 디컴파일을 통해 암호화키가 유출되어 중요정보를 복호화 다. 보안대책 - 암호키는 암호화하여 안전한 별도의 위치에 저장 후 사용 라. 안전한 코드 1. 안전한 암호키 사용 public String encryptData( String plainText ) { String key = getPassword( "/var/password.ini" ); key = decrypt( key ); SecretKeySpec keySpec = new SecretKeySpec( key.getBytes(), "AES" ); ... Cipher cipher = Cipher.getInstance( "AES" ); cipher.init( ..

가. 원인 - 예측 가능한 난수를 발생시키는 취약한 API를 사용 나. 영향 - 다음 숫자를 예상하여 시스템을 공격가능 다. 보안대책 - Java.lang.Math 클래스의 random 메서드의 사용을 자제 - Java.util.Random 클래스의 random 메서드를 사용 - 현재 시간을 기반으로 조합하여 매번 변경되는 시드값을 사용 - 보안결정을 위한 값을 생성 시 java.security.SecureRandom 클래스를 사용 라. 안전한 코드 1. Seed가 가능한 랜덤함수 사용 import java.util.Random; ... public int generateRandom( ... ) { int ran = -1; Date cur = new Date(); ... Random r = new Ran..

가. 원인 - 암호화에 사용하는 키의 길이가 충분하지 않을 경우 나. 영향 - 짧은 길이의 키를 사용하여 암호화 알고리즘을 취약하게 만듬 - 검증된 암호화 알고리즘을 사용하더라도 짧은 시간안에 키를 찾아내 중요정보를 복호화 다. 보안대책 - RSA와 같은 공개키 암호화 알고리즘은 2048bit 이상의 키를 사용 - AES / ARIA / SEED 등과 같은 대칭키 알고리즘은 128bit 이상의 키를 사용 라. 안전한 코드 1. 2048bit 이상의 RSA 암호화 키 사용 final KeyPairGenerator keyGen = KeyPairGenerator.getInstance( "RSA" ); keyGen.initialize( 2048 ); final KeyPair key = keyGen.generat..

가. 원인 - 프로그램 내부에 비밀번호를 하드코딩한 경우 나. 영향 - 하드코드된 비밀번호를 내부인증에 사용하거나, 외부 컴포넌트와 통신에 사용할 경우, 관리자 정보가 노출될 수 있음 - 하드코드된 비밀번호가 인증실패를 야기할 경우, 원인파악의 어려움 발생 다. 보안대책 - 비밀번호는 암호화하여 별도의 파일이나 DB에 안전하게 저장 후 사용 - 디폴트 암호 대신 "최초 로그인" 모드를 사용하여 사용자가 직접 패스워드를 입력하도록 설계 라. 안전한 코드 1. DB계정정보 암호화 후 사용 private static final String DB_USER = "db_manager"; ... public Connection getConnection( ) { Connection conn = null; ... // ..

가. 원인 - 사용자 및 시스템의 중요정보를 평문으로 송/수신할 경우 나. 영향 - 네트워크 스니핑을 통해 인가되지 않은 사용자에게 민감정보 등이 노출 다. 보안대책 - 로그인 시 반드시 HTTPS와 같은 안전한 통신채널을 사용 - 중요정보는 암호화 후 전송하거나 안전한 통신채널을 사용 - 중요정보를 쿠키로 전송할 경우, HTTPS통신으로만 값이 전달될 수 있도록 보안속성( setSecure(true) )을 설정 - 중요정보를 쿠키로 전송 시 HTTP 통신을 해야할 경우, 반드시 암호화 후 전송 라. 안전한 코드 1. 패스워드를 암호화 후 전송 String pwd = getPassword(); ... // 데이터 암호화 후 전송이므로 서버의 공개키로 양방향 암호화 처리 후 전송 // 서버의 비밀키로만 복..

가. 원인 - 패스워드 / 개인정보 / 인증정보 / 금융정보 등의 중요정보를 암호화하지 않고 평문으로 저장 나. 영향 - 저장된 파일이나 DB정보가 유출될 경우, 개인정보, 패스워드 등의 중요정보 및 민감정보가 유출 다. 보안대책 - 개인정보 / 금융정보 / 패스워드 / 민감정보를 저장 시 암호화 후 저장 - 중요정보를 읽거나 쓸 경우에 권한검증을 수행 - 디스크나 메모리에 있는 민감한 데이터를 지울때 안전한 방식으로 삭제 라. 안전한 코드 1. 패스워드 암호화 후 저장 String pw = request.getParameter("password"); // 패스워드는 128비트 이상의 암호키를 사용하는 일방향 암호화 처리 후 저장 MessageDigest digest = MessageDigest.getI..

가. 원인 - 중요정보를 취약한 암호 알고리즘을 사용하여 암/복호화 처리 - BASE64와 같은 지나치게 간단한 인코딩으로 암/복호화 나. 영향 - 중요정보가 복호화 되어 노출 다. 보안대책 - 자체 개발한 암호화 알고리즘은 사용하지 않음 - 이미 검증된 표준화 된 암호화 알고리즘을 사용 - 3DES, AES, RSA, SHA2 등의 안전한 암호화 알고리즘을 사용 라. 안전한 코드 1. 안전한 암호화 알고리즘 사용 public byte[] encrypt( byte[] msg, Key key ) { byte[] result = null; try { Cipher c = Cipher.getInstance( "AES/CBC/PKCS5Padding" ); c.init( Cipher.ENCRYPT_MODE, k )..
- Total
- Today
- Yesterday