한국인터넷진흥원에서 소프트웨어 보안 약점과 관련해서 어떤 코드 유형이 나쁜 것인지 제시한 가이드가 있다. 호호. 사실 구현하기에도 빡센 코딩.. 정신이 없어서 제대로 보지 못했는데. 좀 보면 좋을 것 같아서 들고 왔다. 읽어야 할 양이 꽤... 된다. 소프트웨어 보안약점 진단가이드만 봐도 612페이지다...ㅋㅋㅋ 와 가이드만 만든다고 되게 애쓰셨겠다 싶음.
시큐어 코딩 가이드는
1. 입력 데이터 검증 및 표현: 대표적으로는 SQL Injection, XSS 부터. 부적절한 기타 명령어 삽입이나 신뢰되지 않은 URL주소 접속 연결 등
2. 보안 기능: 부적절한 인가, 잘못된 권한 설정, 취약한 암호화 알고리즘 사용, 하드코드된 중요 정보, 취약한 비밀번호, 무결성 검사 없는 코드 다운로드, 쿠키 통한 정보 노출 등
3. 시간 및 상태: 검사시점, 사용시점, 종료되지 않는 반복문이나 재귀 함수
4. 에러 처리 : 오류 메시지 정보노출, 부적절한 예외 처리
5. 코드 오류: Null Pointer 역참조, 신뢰할 수 없는 데이터의 역직렬화
6. 캡슐화: 잘못된 세션에 의한 데이터 정보 노출, 남은 디버그 코드, private 배열에 public 데이터 할당
7. API 오용: DNS lookup에 의존한 보안 결정. 취약한 API
등등이 있다. OWASP는 좀 더 가짓수가 다른데 2021년에는 다음과 같다.
원래는 SQL Injection에 대해서 파악하려고 읽었던 건데 시큐어 코딩 가이드 북도 궁금해서 한국인터넷진흥원에 들어가서 가이드북도 직접 보았다. 한국인터넷진흥원 가이드북 링크
들어가면 pdf로 가이드를 다운받을 수 있다. 최신 일자로 된 등록일로 받아서 보는 게 좋을 것 같다.
쭉 읽다 보면 안전하지 않은 코드의 예와
from django.shortcuts import render
def update_board(request):
......
with dbconn.cursor() as curs:
# . 외부로부터 입력받은 값을 검증 없이 사용할 경우 안전하지 않다
name = request.POST.get('name', '')
content_id = request.POST.get('content_id', '')
# 사용자의 검증되지 않은 입력으로 부터 동적으로 쿼리문 생성
sql_query = "update board set name='" + name + "' where content_id='“ + content_id + "'"
# . 외부 입력값이 검증 없이 쿼리로 수행되어 안전하지 않다
curs.execute(sql_query)
curs.commit()
return render(request, '/success.html')
안전한 코드의 예시 등이 나온다.
from django.shortcuts import render
def update_board(request):
......
with dbconn.cursor() as curs:
name = request.POST.get('name', '')
content_id = request.POST.get('content_id', '')
# . 외부 입력값으로 부터 안전한 매개변수 화된 쿼리를 생성 한다
sql_query = 'update board set name= %s where content_id=%s'
# 사용자의 입력 값을 매개변수 화된 쿼리에 바인딩 하여 실행되므로
# . 안전하다
curs.execute(sql_query, (name, content_id))
curs.commit()
return render(request, '/success.html')
이 부분은 SQL Injection과 관련한 python 코드 내용이다. Java, ORM 등등 기타 관련한 코드 내용도 있다. 가이드 북이 상당히 방대하니 필요한 부분은 ctrl + f 로 검색해서 읽는 것이 좀 편할 것 같다. 후.. 만드는 것만큼 보안 과제들도 불어나는 느낌.
가이드의 목적과 구성은 다음과 같다.
구현과정이 완료되는 시점에서 아마 보안진단도 같이 이루어질 것 같은데 이 가이드 북도 참고가 되겠지...Python 시큐어코딩 가이드도 따로 있어서 만약 Django 프로젝트라면 python 시큐어 코딩 가이드 북을 보는 게 좋을 것 같다.
정보 보안과 관련한 용어 정리 time.
정보 보안 요소로 기밀성, 무결성, 가용성 3가지가 있다. 영어로는 Confidentiality, Integrity, Availability.
기밀성은 인가된 사용자만 정보에 접근하도록 하는 것, 무결성은 시스템 정보를 수정하기 위해서는 인가된 사용자가 인가된 방법으로만 수정하는 것, 가용성은 인가된 사용자가 필요할 때 데이터에 접근할 수 있는 능력!
스니핑(Sniffing), 스푸핑(Spoofing)이 인터페이스 통신 할 때 데이터 기밀성을 훼손하는 종류인데.
스니핑은 감청이라는 영어 단어처럼 데이터 내용을 송신과 수신하는 중간에 도청하는 방법이다. 직접 공격하는 것보단 데이터만 몰래 들여다 보는 것이고, 패킷 분석기 같은 스니퍼를 통해서 진행한다. 스푸핑(Spoof -> 눈속임하다) 도 잘못된 연결인데 사용자가 해당 연결을 신뢰하게 만들어서 잘못된 정보에 연결해서 정보를 빼가는 방식이다.
끝!
'Programming' 카테고리의 다른 글
개체 무결성 (0) | 2022.04.29 |
---|---|
용어 정리) TCP/IP 플래그 비트 , 영속 계층의 DAO, DTO, VO (0) | 2022.04.29 |
(오류) warning: mysql_num_rows(): supplied argument is not a valid mysql result resource (0) | 2022.04.23 |
[java] 이클립스에서 워크스페이스 설정해도 프로젝트가 보이지 않을 때, Eclipse, Workspace, Package explorer (0) | 2022.04.23 |
(보안) SQL Injection, XSS(Cross Site Script), 2021 OWASP top 10 (0) | 2022.04.23 |