SK shieldus Rookies 16기 (애플리케이션 보안#02)

만두다섯개·2023년 11월 3일
0

SK 루키즈 16기

목록 보기
9/52

주요 정보

  • 교육 과정명 : 클라우드기반 스마트융합보안 과정 16기
  • 교육 회차 정보 : '23. 11. 3. 애플리케이션 보안 #02

참고 정보

  • DRF : Django RESTfulAPI 서버 생성 라이브러리. 토큰 및 세션 인증을 제공한다

보완할 점

  • 복습) 알라딘 크롤링 사이트 추가기능 (DB 연결, 썸네일 저장) -> DB lock 오류 미해결
  • Django DB 연동 및 기초설정

무엇을 깨달았나

  • SW 개발보안 방법론에서의 보안 기능들
  • 앱 보안이라는 넓은 범위의 기본 이론을 학습하는 걸 감안하더라도, 다양한 API 사용, Django, 파이썬, 자바, DB등을 사용한다.
  • 여러 문법을 기본 도구로 사용하는 앱 보안 학습과정이 어렵다.. 보안으로 먹고살려면 높은 수준이 요구된다.

구현단계 보안약점 제거 기준 유형

#2 보안 기능

  • 보안 기능 종류 : 인증, 접근제어, 기밀성, 암호화, 권한관리
  • 보안 기능의 부적절한 구현으로 보안약점이 발생
  • 보안약점 종류 : 인증없는 중요기능 허용, 부적절한 인가
  • Django 프레임워크는 앱을 통해 인증 로그인/로그아웃 제공
  • DRF 에서는 토큰 및 세션 인증 제공

적절한 인증 없는 중요 기능 허용

  • 취약점 발생 가능
    1. 패스워드 수정 요청시, 패스워드, DB의 기존 패스워드 비교 없이 처리
    2. 중요 기능 접근시, 패스워드 재확인 절차 생략
  • 취약점 보완 방법
    1. 패스워드 수정 요청 시, 수정을 요구한 사용자에게 현재 패스워드 요청 및 검증
    2. 패스워드 재인증 (변경 패스워드, 변경 패스워드 재확인)

부적절한 인가

  • 작업 요청자의 권한 확인없이 작업 실행시 파일 삭제 등 발생 가능
  • 취약점 발생 가능
    1. 작업 요청자 권한 검증 없이 작업 처리
  • 취약점 보완 방법
    1. 접근 제어 목록(ACL) 사용한다

중요한 자원에 대한 잘못된 권한 설정

  • 중요 자료 자원에 대해 프로그램이 권한을 의도하지 않게 허가 시, 권한 부적합한 사용자에 의해 자원의 부적절한 사용 가능
  • 취약점 발생 가능
    1. os.chmod 로 해당 파일에 대한 잘못된 권한 설정
    1. 0o777 : 모든 사용자가 해당 파일 사용 및 접근 가능
  • 취약점 보완 방법
    1. 최소 권한 파일 설정
    2. 각 사용자별 최소 권한 설정
    3. 권한 부여시에도 제한적인 권한 부여(파일을 읽기만 가능..)

취약한 암호화 알고리즘 사용

  • 취약, 위험 알고리즘 사용 금지(base64, sha128, MD5 -> 솔트 사용없는 해시 함수 )
  • 표준화 되지 않는 알고리즘 사용은 무력화 가능성 존재
  • 검증된 알고리즘만 사용하는 것이 안전하다. 자체 암호화 알고리즘 개발 및 사용 금지
  • 레인보우 테이블 : 해쉬 함수 값들이 저장된 표
  • 취약점 발생 가능
    1. 위험한 암호화 알고리즘 사용 : DES, base, md5 해시함수
  • 취약점 보완 방법
    1. 아직까지 안전한 암호화 알고리즘 사용 : AEC 알고리즘, 등.

암호화되지 않은 중요정보

  • 개인정보 등은 법적으로 암호화하도록 제정.
  • 개인정보(주민등록번호), 금융정보(계좌번호), 패스워드 등 중요 정보는 저장 및 통신채널 전송시 반드시 암호화 과정 거쳐야 한다. 또한 해당 중요정보 접근에 대한 권한인증이 필요하다.
  • 중요정보를 평문으로 저장하는 것은 금지
  • 보안 채널 사용 : SSL, HTTPS 등..
  • 보안 채널이 아닌 브라우저 쿠키에 중요 데이터 저장시, 쿠키 객체애 보안속성(Secure =True) 설정으로 정보 노출 방지
  • 취약점 발생 가능
    1. 중요정보 평문 저장(패스워드 등)
    2. 패스워드를 암호화 없이 전송
  • 취약점 보완 방법
    1. 패스워드에 적합한 해시 알고리즘 및 솔트 적용 후 저장
    2. 중요정보 암호화 후 전송

하드코드된 중요정보

  • 하드코딩이란? 코드 내부에 존재하는 데이터가 있는것을 의미한다.
  • 해시 알고리즘 결과를 변수에 저장, 결과를 외부에 보관하는 과정 존재한다. 따라서 해당 과정 중에는 코드 내부에는 키 정보가 없어야 한다. (대안 : API 사용 등..)
  • 무차별 공격의 위험 존재. 이는 해쉬화된 암호도 취약하다.
  • 키는 개발자도 몰라야 한다.
  • 운영과 개발에서 사용하는 키는 달라야 한다.
  • 취약점 보완 방법
    1. 패스워드는 암호화 후 별도의 파일에 저장한다
    2. 중요 정보 암호화시 암호화 키를 사용한다 (상수 사용 금지)
    3. 암호화된 값, 암호화 키가 코드 내부에 존재 금지

충분하지 않은 키 사용

  • 각 암호화 알고리즘 별 충분한 키 길이가 안전하다 (RSA – 2,048 비트 이상의 키 사용)
  • 대칭 암호화 알고리즘은 128비트 이상의 키 사용해야 한다.
  • 특정 암호 비트 이상 사용
  • 암호화 알고리즘 안전성 유지기간 존재(시간이 지날수록 감소 가능)
  • 인증된, 안전한 암호화 알고리즘을 사용하더라도, 충분한 길이의 키를 사용해야 하는 것
  • 취약점 발생 가능
    1. RSA.generate(1024) #2048비트 이하로 설정 시 안전하지 않다
    2. ECC는 키 길이 224비트 이하 설정 시 안전하지 않다
  • 취약점 보완 방법
    1. RSA 키 2048비트 이상 사용
    2. ECC 키 224 트 이상 사용

충분하지 않은 키 길이 사용

  • 파이썬 random 모듈을 보안 목적(난수 발생 결과 값을 SEED로 사용시)으로 사용시 위험
  • 따라서 난수 생성 목적으로 보다 안전한 secrets 모듈을 사용해야 한다

적절하지 않은 난수 값 사용

  • 예측 가능한 난수를 사용하면, 공격자는 다음 생성되는 숫자를 예상해 시스템 공격 가능
  • 보안 기능 수행 시, random 모듈보다, secrets 모듈 사용 권고.

취약한 패스워드 허용

  • 사용자가 취약한 패스워드 사용시, 해당 계정의 보안 레벨이 낮아지고, 해당 계정이 시스템, 서비스 취약점으로 변질될 수 있다.
  • KSIA 패스워드 선택 및 이용 안내 참고
  • 패스워드 생성시 검증(정규식 이용 등..)

부적절한 전자서명 확인

  • 전자서명은 데이터 전송, 다운로드시 사용된다.
  • 프로그램, 라이브러리, 코드의 전자서명에 대한 유효성 검증 필요
  • 해시 기반 검증만 사용시, 해시 변조로 악성 코드 전달 가능, 전자서명 사용시, 원문 데이터에 대한 해시 자체도 보호 가능
  • 데이터 다운로드, 전송 시 전자서명 사용 후 전송 및 수신측에서는 이를 검증

부적절한 인증서 유효성 검증

  • 적절하지 않은 인증서(유효하지 않은 인증서, 악성 인증서) 사용으로 해당 인증서를 중간에서 공격자가 가로채 속일 수 있다(스푸핑, spoof(단어뜻 : 속이다) 발생)
  • 스니핑은(킁킁거리다, sniffing) 패킷을 훔쳐보는 것을 의미한다.

사용자 하드디스크 저장되는 쿠키를 통한 정보 노출

  • 웹 응용프로그램에서 쿠키는 메모리(사용자)에 상주한다. 브라우저 종료시에 보통 사라지지만, 개발자가 원하는 경우, 브라우저와 웹 서버와 세션에 상관없이 지속적으로 저장 가능하다.
  • 위 경우에는 메모리가 디스크에 저장되고, 다음 브라우저 세션 시 메모리에 로드된다. 이를 영속적인 쿠키(Psersistent Cookies)라고 한다. 이는 공격자의 공격 도구로 이용될수 있어 취약점으로 변질될 수 있다.
  • 취약점 보완 방법
    1. Django 에서는 쿠키에 대한 설정 가능(SESSION_COOKIE_AGE, 등)
    쿠키 만료시간 설정(1년 -> 1일)
    2. Nginx 에서도 쿠키 만료시간 설정 가능

주석문 안에 포함된 시스템 주요정보

  • SW 중 편의 목적으로 계정정보 등의 주요정보를 주석으로 작성시, 추후 완성과정에서 제거가 어려움.
  • 공격자가 소스코드 접근 시, 주요정보 획득 가능

솔트 없이 일방향 해시 함수 사용

  • 해시 함수 사용시 솔트 없는 일방향 해시함수 사용 가능, 이는 레인보우 테이블로 해시값을 취득 가능하다
  • 사용자별 유일한 솔트값 생성 및 별도 저장 과정 사용한다

무결성 검사없는 코드 다운로드

  • 파이썬 프로그램을 공식 페이지에서 다운로드 시, 페이지 하단에 파일에 대한 해시값을 제공한다, 이는 다운로드한 파일과, 웹 서버에서 전송한 파일이 맞는지 확인하기 위해 있는 것으로, 무결성 검사(변조 확인)에 사용 가능하다. - 참고 블로그
  • DNS 스푸핑 공격에 대한 방어는 DNS lookup을 수행한다.
    즉, lookup 명령어를 사용해 사용자가 직접 DNS 목록 확인을 통한 도메인주소와 IP주소를 검증해라.
    추후 API 오용 항목 중, DNS lookup에 의존한 보안결정이 나오는데, 변질(오염)된 DNS 의존이 보안취약점이다 라는 의미인듯하다.

반복된 인증 시도 제한 기능 부재

  • 무차별 대입 공격으로 로그인 시도 등, 인증시도 제한 없거나, 계정 잠금 기능 적용되어있지 않는 취약점 존재한다.
  • 최대 인증 횟수 설정 및 횟수 인증 초과시 해당 계정 잠금 및 추가 인증을 거쳐 재시도 가능 설정한다.
  • CAPTCHA, Two-Factor(OTP, 홍채 등...) 사용한다
profile
磨斧爲針

0개의 댓글