본문 바로가기

lingua/Computer

SW개발보안

오늘 우연히 기회가 닿아 KISA에서 주관하는 SW개발 과정(2019.8.9)에 참석하게 되었다. 한 20명 남짓하는 사람이 모여 진행할 것으로 생각했던 이 과정은 도착하자마자 놀라게 한 건 참석한 인원수였다.

 

 

엄청나게 많은 인원이 있었는데, 목록을 훓어보면서 느낀 부분은..잘못왔다..ㅎㅎ 공기관에서 많은 사람들이 온 것이었다. 교육을 진행하는 (주) 오픈이지 라는 곳은   https://openeg.co.kr   에서 확인해 볼 수 있었는데, 꽤나 홈페이지를 관리하고 있는 곳이었다. 적당히 관리하는 곳이었다. 보통 업체에 대한 정보를 듣게 되면 홈페이지 관리에 대한 부분을 보게 되고, 그에 따른 선입견이 생기게 되는 것 같다.

 

Open Expert Group

시큐어코딩 교육/컨설팅 전문가 그룹

openeg.co.kr

오늘 작성할 글은 교육에서 다루는 부분을 러프하게나마 다루고, 내가 가지고 있는 지식을 결합해 정리할 수 있기를 기대하며 정리를 해보도록 한다. (교육에 참석은 자주 하였으나, 이렇게 정리를 시작하게 된 건 좋은 계기가 되었다.)

 

먼저 교육 참여 방법은  https://academy.kisa.or.kr   에서 확인할 수 있으며, 가격은 대부분 무료다. 물론 무료라서 노쇼 비율도 상당히 높은 편이다. (나 또한 몇몇 교육에 대해 회사 일정으로 인해 불참한 적 있으나, 나는 노쇼는 아니었다. 사무국에 메일을 보내주었으니..)

 

KISA LMS

디지털 포렌식 실습 2차 판교 4일 (28시간) 2019-08-27~2019-08-30

academy.kisa.or.kr

 

[인트로, 정의(워딩)]

우선 제목에 있듯이 기본 과정이기 때문에 전체적인 부분을 깊지 않게(흥미 유발 목적?) 다루게 된다. 처음 시작했던 포인트는 워딩에 대한 부분이었다. 시큐어(secure), 소프트웨어(software), 약점(weakness), 취약점(vulnerabillites) 처럼 과정과 교육 진행에 있어서 필수적인 부분을 우선 정의했다. 또, 중간중간에 추가되는 워딩에 대해서도 정의하며 진행되었다. 위협(threat), 위험(risk)와 같은 워딩이 추가되는 워딩이었다. 

 

CVE, SANS 등의 약점과 취약점을 다루는 표준(?)에 대한 부분을 공유하고, 프로세스에 대한 과정 설명을 하게 되었다. 많이 본 도식이 교육 화면에 있었고 요약하면, 요구사항 - 설계 및 디자인 - 구현 - 테스트로 구성되어 있다.

각 단계 별로 구체적으로 어떤 업무를 하는 지 알아보면,

요구사항: 요구사항 중 보안 요구사항 식별.

설계 및 디자인: 보안 요구사항과 위협에 대한 보안통제를 고려, 위협원 도출, 외부 인터페이스 식별, 보안통제 수립

구현: 표준코딩 정의서 및 SW개발보안 가이드를 준수 하여 개발, 소스코드 보안약점 진단(도구 활용)

테스트: 실행코드 보안 취약점 진단(동적분석: 스캐닝, 모의해킹 테스트 등)

 

대략적인 기초 부분이라, 명상하듯이 들을 수 있었다. 가끔 강하게 표현하시는 분들을 만나면 막 질문을 하기도 하는데, 굉장히 사무적인 교육진행으로 따로 질문할 게 있진 않았다. 아무래도 기본과정이라 다양한 수강생을 커버해야하기 때문이라 생각되는 부분이다.

 

[사고사례]

블록체인쪽 사례와 일반적인 OWASP와 관련하여 발생할 수 있는 시나리오 등에 대해서 설명되었다. 개인적으로 아쉬웠던 부분은 '실제 사례와 연결시켜줬으면 어땟을까' 라고 생각했는데, 이 부분이 따로 진행될 수 없는 이유는 이미 알기에 넘어갔다. 그리고 이런 부분에 대한 공유는 특정 회사에 대해서 소수 공유가 이루어 지기도 하는데, 나의 경우는 작년 나야나 사태에 대한 사례에 대해서 공유 받은 경험이 있다. 그 과정에 참석해서 들을 당시에는 모든 내용이 들어오진 않았지만 지금은 그때 적어둔 노트를 통해 복기를 완료했다.

 

[설계보안과 구현보안]

 설계보안은 4개 분야, 20개의 항목의 보안 요구항목이 있다. 각각을 분야에 따라 분류하면,

입력데이터 검증 및 표현:사용자, 푸로그램 입력 데이터에 대한 유효성 검증체계를 갖추고 실패 시 처리 - 10가지 항목

DBMS, XML, 디렉터리 서비스, 시스템 자원 접근 및 며영어 수행, 웹 서비스, 웹 기반 중요 기능, HTTP 프로토콜, 허용된 메모리 접근, 보안 기능 동작에 사용되는 입력값, 업로드-다운로드 

보안기능: 인증, 접근제어, 권한 관리, 비밀번호 등의 정책이 적절하게 반영 - 8개

인증 대상 및 방식, 인증 수행 제한, 비밀번호 관리, 중요자원 접근 통제, 암호키 관리, 암호연산, 중요정보 저장. 중요정보 전송

에러처리: 오류 메세지에 중요 정보가 포함되어 출력되지 않도록 안전한 처리 - 1개

예외처리

세션통제: 다른 세션 간 데이터 공유 금지 등 세션을 안전하게 관리 - 1개

세션통제

 

식사 후 추가 정리하도록 하겠다. 근처 초밥집에서...2인분 시켜서 다 먹고, 커피랑 초코파이도 먹고 있는 나..칭찬해!

 

구현보안은 설계보안에 비해 항목은 매우 많으나 그 내용에 대해서는 보다 구체적으로 작성되어 있는 편이다.  대부분 설계보안에 기반한 부분인데, 그 외에 추가된 부분에 대해서 따로 정리하는 게 나을 것 같아 그 부분을 정리하겠다. 구현보안의 분야는 입력데이터 검증 및 표현, 보안기능, 시간 및 상태, 에러처리, 코드오류, 캡슐화, API 오용 등이 있다. (추가된 부분은 밑줄 표시해두었다.) 

 

[보안약점 제거 예시]

- '%${ketword}%' -> '%'||#{ketword}||'%' (티스토리 소스보기에서도 많이 볼 수 있는 형태의 코드다.)

- 인코딩 적용 (서블릇, JSP 출력값에 HTML.인코딩 적용, JSP JSTL Core 출력 포맷을 사용, XSSFillter 라이브러리 활용)

- 위험한 형식 파일 업로드 제거의 경우 확장자에 대한 체크인데, 이는 거의 모든 솔루션에서 사용되지만..사견으로 이런 방법은 지양해야 한다고 생각한다.

- 하드코딩하지마시오..이건 대부분 이야기하는 부분이지만 하드코딩한 부분에 랜덤생성되는 부분이 같이 구성되면 사실 크게 문제는 없다고 생각한다. 이 부분에 대해서는 반론이 많을 수 있는데, 다시 한번 말하자면 사견이다!.

 

3. 교육 후기

강사 분이 강의를 매우 폭넓게 진행한다. 이 말은 바로, 거의 컴퓨터를 모르는 분에게 가르친다고 생각하는 정도의 말부터 어느정도 하는 분들에 대한 부분을 모두 커버(?)하는 말들이 슝슝 날라다닌다. 그 예로, "위험해 보이는 URL을 클릭하지 마세요" 라는 말을 했다가 한참 뒤에는 크로스사이트스크립팅(XSS) 취약점에 대한 방어 코드를 설명하기도 한다. 그리고 시연을 하는 부분에 있어서는 좀 개선이 있었으면 좋겠다. 특정 웹 페이지(HTML)을 구성해놓고, 그것에 대한 데이터 변조나 이런 부분을 실제로 보여주면서 진행을 한다. 80여명 정도되는 참가자 중에서 컴퓨터를 들고온 건 나를 포함해 10명 미만이었다는 걸 감안하면, '교육이 너무 형식적인 진행이 되지 않았나'..하는 아쉬움이 있다. (실제로 교육 시작 전 "공무원들은 8시간 교육이 필요하시니 도망가지 마세요~"라는 말도 있었다. 난 관계없다는 게 함정)

 

관련해서 참고할 만한 사이트를 공유

보안약점 (http://cwe.mitre.org )

 

CWE - Common Weakness Enumeration

CWE™ is a community-developed list of common software security weaknesses. It serves as a common language, a measuring stick for software security tools, and as a baseline for weakness identification, mitigation, and prevention efforts.

cwe.mitre.org

NIST 표준 (https://nvd.nist.gov )

 

NVD - Home

Last 20 Scored Vulnerability IDs & Summaries CVSS Severity CVE-2017-18469 — cPanel before 62.0.17 allows demo accounts to execute code via an NVData_fetchinc API call (SEC-233). Published: August 05, 2019; 09:15:11 AM -04:00 V3: 6.3 MEDIUM V2: 6.5 MEDIUM C

nvd.nist.gov

Cert 보안 표준 (https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards )

 

SEI CERT Coding Standards - CERT Secure Coding - Confluence

배너의 맨 끝으로 배너의 맨 처음으로 SEI CERT Coding Standards 메타 데이터의 끝으로 건너뛰기 작성자 : Admin, 최근 변경 : Robert Schiela - 2월 05, 2019 메타 데이터의 시작으로 이동

python OWASP 보안 점검 (http://www.pythonsecurity.org )

 

Welcome | OWASP Python Security Project

Python Security is a free, open source, OWASP project that aims at creating a hardened version of python that makes it easier for security professionals and developers to write applications more resilient to attacks and manipulations. The project is design

www.pythonsecurity.org