반응형

IT/Secure Coding 19

주기적인 비밀번호 변경

사용자의 비밀번호는 주기적으로 변경되어야 한다. 사용자의 비밀번호는 고정적인 주기로 변경되어야 한다. 변경했던 비밀번호를 DB에 저장해 두고, 이전에 사용했던 비밀번호는 사용할 수 없어야 한다. - DB에 비밀번호 수정 날짜 컬럼을 생성한 후, 쿼리를 이용해서 날짜가 지난 사용자에게 알려주기. 날짜 비교하는 쿼리 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -- SYSDATE : 현재 날짜 -- SYSDATE-1: 전 날짜 -- SYSDATE-(3/24) : 현재시간에서 3시간 전 -- SYSDATE-(10/24/60) : 현재시간에서 10분전 -- SYSDATE-(10/24/60/60) : 현재시간에서 10초 전 SELECT SYSDATE, SYSDATE-1, SYSDATE-(3/2..

IT/Secure Coding 2015.04.24

잘못된 캡슐화

1. 잘 못 사용되고 있는 캡슐화 클래스의 멤버변수로 자리잡고 있는 아래 두가지에 대해서는 getter/setter 의 내용을 변경해야 한다. 배열 Class 위 두 타입은 모두 "메모리 주소" 를 저장하고 있으므로, 일반적인 방법으로 캡슐화 하면 외부에서 값의 변경이 가능하다. 따라서 아래와 같이 변경되어야 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // 배열 public String[] getColors() { String[] newColor = new String[colors.length]; System.arraycopy(colors, 0, newColor, 0, colors.length); return newColor; } publ..

IT/Secure Coding 2015.04.24

잘못된 접근 제한(사용자의 행동 기록)

사용자의 행동 기록 1. 사용자가 메뉴를 사용할 때 모든 행위는 기록되어야 한다. 아이디 시간 접근한 IP 접근한 Menu 실행한 Action(CRUD) 2. 권한이 없는 사용자는 그 메뉴자체를 보여주지 않아야 한다. 삭제에 대한 권한이 없는 사용자에게 삭제 버튼을 보여주어서는 안된다. URL을 통한 접근을 시도할 때, 현재 요청자가 그 기능에 대한 권한이 있는지 체크하고 없다면 서비스를 거부해야한다. 1. 사용자의 행동을 Console창에 log로 보여주기(실무에서는 DB에 저장 함). ActionHistoryInterceptor class 생성 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3..

IT/Secure Coding 2015.04.24

로그인 제한

로그인 시도 횟수 제한 사용자가 로그인을 계속해서 시도할 경우 아래 두 가지 중 하나를 해야 한다. - 사용자가 비밀번호를 잊어버릴 수 있으므로 비밀번호를 찾도록 가이드 한다. - Bot에 의한 자동화된 해킹 시도일 수 있으므로 자동적인 로그인을 차단한다. 로그인 시도는 Log 혹은 DB에 기록되어야만 한다. 1. DB 에 Login Count 컬럼 추가 2. MemberController에 추가 1 2 3 4 5 6 7 8 9 10 11 @RequestMapping(value=("/member/login"), method=RequestMethod.POST ) public void login(LoginVO loginVO, HttpSession session, HttpServletResponse respo..

IT/Secure Coding 2015.04.24

Open Redirect

중간에 URL을 catch해서 자신이 원하는 url로 값을 변경할 수 있다. 이를 막기 위한 방법 whiteList를 이용해서 url을 숨겨준다. OpenRedirectController 수정 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 package kr.co.hucloud.security.code.example.attack.openredirect; import java.util.HashMap; import java.util.Map; import javax.servlet.htt..

IT/Secure Coding 2015.04.23

Encrypt Password

사용자의 비밀번호는 모두 강력한 암호화 기법을 사용해 암호화 해야한다. 일반적인 방법으로 단방향 암호화 기법인 MD5를 사용하는데, 이 알고리즘은 출현한지 오래되어 이미 해킹이 가능한 수준이 되어 더 이상 안전한 방법이 아니다. 일반적으로 AES / SHA / DES를 많이 사용하는데 DES 알고리즘은 AES 알고리즘이 출현한 이후 더이상 사용하지 않는다. 그런데, 위 AES / SHA / DES 는 메시지 인증 및 무결성 체크를 위한 알고리즘이지, 패스워드 암호화를 위한 알고리즘이 아니다. 따라서, 이 알고리즘들을 패스워드 암호화에 사용한다면 "복호화"가 가능하다는 취약점이 있다. 원래 위 3개 알고리즘은 "단방향"의 복호화가 불가능한 암호화 알고리즘이지만, 이미 많은 해커들이 "복호화"를 시도했고, ..

IT/Secure Coding 2015.04.23

XSS

XSS - 쿠키 정보를 빼내서 좀비 피시로 만드는 것 - 공격자가 악의적인 의도로 script(자바 스크립트)를 작성해서 정보를 빼내는것 쿠키 - 사용자 정보를 클라이언트 pc에 저장해 놓는것 (ex. 자동 로그인) 1. Reflective XSS 공격자가 악성 스크립트가 포함된 URL을 클라이언트에게 노출시켜 클릭하도록 유도하여, 쿠키 정보를 탈취하거나 피싱 사이트, 불법 광고 사이트로 이동하게 한다. 2. Stored XSS 악성 스크립트를 DB에 저장하여 해당 DB 정보를 이용하는 애플리케이션을 통해, 시스템을 사용하는 모든 사용자들이 해당 스크립트를 실행하게 함으로써 사용자의 쿠키 정보를 탈취하거나 피싱사이트, 불법 광고 사이트로 이동하게 한다. 3. DOM XSS DOM(Document Obje..

IT/Secure Coding 2015.04.23
반응형