728x90
반응형
SMALL

CISA (Certificated Informaton System Auditor / 국제공인정보시스템감사자) 자격증은 2011년도에 취득했다.
개인적으로는 취득하기가 그렇게 어려운 자격증은 아니라고 생각한다.
다른 외국 자격증이 다 그러하듯이 시험비용도 50만원정도 하고 (지금은 얼마인지도 모르겠지만) 
또 거지같은게 매년 갱신비용을 내야한다. 개념이 자격증이라기 보다는 Certification 개념이다 보니깐
우리나라 자격증은 한번 따면 갱신이 거의 필요 없는데.. ㅠㅠ
달러로 85달러니깐 한화로 약 10만원 정도 매년 납부를 해야 한다..
2011년도 이후 당장 쓸일도 없지만 딴게 아까워서 expired 될까봐 매년 갱신을 해왔다..
정말 아깝다는 생각이 드는데.. 이전에 PMP도 취득했지만 갱신을 안해서 Expired 된 상태라 CISA라도
유지를 하겠다는 생각에 매년 카드 결제를 해왔는데..올해도 어김없이 renewal 편지가 도착했다. 
CISA는 갱신비용 뿐만 아니라 매년 자기가 CISA관련 활동을 한 기록을 보고(등록) 해야 한다.
이것을 CPE (Continuous Professional Education) 라고 하는데 3년 동안 총 120시간을 등록해야 한다.
그렇다고 특정연도에 120시간을 몽땅 등록하면 안되고 연도별로 최소 20시간이상은 등록해야 한다.
1년에 40시간 꼴인데.. 자기가 진짜 감사 업무를 하고 있다면 자기 근무시간 자체가 CPE로 등록할수
있고, 그렇지 않은 직장인 경우에는 관련 활동을 진짜던 가짜던 등록해서 시간을 채워야 한다.
그러면 ISACA에서 어떻게 진짜인지 가짜인지 판별하느냐... 제가 알기로는 샘플링해서 해당 등록자에게
관련 증비서류를 보내라고 요구를 하는 걸로 알고 있다.. 즉 재수없이 걸릴수도 있고 안걸릴수도 있고
저는 8년동안 했지만 그런 요청을 받은적은 없었다..

ISACA.org 사이트에서 로그인을 하면 아래 화면이 나온다.
여기서 MyISACA 탭을 누른다. 


아래 MyISACA 화면을 보시면 85달러 납부하라고 나와있음. (올해는 안할까 생각중..)
Certification & CPE Management 메뉴를 클릭.


아래 화면에서 우측 동그라미에는 올해 2019년도에 등록한 CPE 시간과 3년(2019~2021) 토탈 시간이 나오고
하단 리스트에는 연도별 등록한 CPE (Earend HRS) 시간과 최소한 등록이 필요한(CPE HRS DUE) 남은 시간이 나온다. 


위화면에서 MANAGE CPE 버튼을 누르면 아래 화면이 나온다.
하단에는 기 등록한 CPE내용이 나오고 우측에 있는 ADD CPE 버튼을 누르면 등록화면이 나온다.


Title/Description : 제목이다.. 한글로 써도 되는지는 모르겠으나 나는 영어로 썼다.
                        예를 들어 감사관련 교육을 4시간 받았다고 하면..  Information Security Education 이라는 식으로
                        작문을 해서 썼다.  제목이 그렇게 중요하지 않음.
Sponsoring Organization : 주최기관이라고 번역해야하나..하여튼 교육을 받고 왔으면 교육기관명을 쓰면된다.
                        예를 들어 한국인터넷진흥원에서 주관하는 교육이였다면.. Korea Internet Security Agency 라고 
                        쓴다.. 영문명을 잘 모르시면 해당 홈페이지에 가시면 영어사이트 클릭해서 보시면 됨.
Start Date : 시작일자
End Date : 당연 종료일자.
Qualifying Activity : 이 항목이 젤로 중요한 항목인거 같다.  콤보박스 클릭하면 아래와 같이 리스트가 나오는데..
                          주로 관련 시험을 봤다던지, ISACA정식 교육을 진행했는지(강사로서) , 책을 출판했는지 등등이다.
                          이중에서 자기 경우와 안맞는 경우가 더 많을수 있다.
                          KISA에서 교육받은거라면 머.. Self-Study Courses 를 써도 되고.. 
                          보안진단업무를 수행했다면 Working as a Cybersecurity Practitioner 를 해도 되고..       
Method of Delivery : 직접 했다면 In Person              
Hours : 활동 시간


다 입력한다음 Save & Close 버튼을 누르면 끝..

728x90
반응형
LIST
728x90
반응형
SMALL

비정형 데이터란?

형식이 정해지지 않은 데이터. 데이터는 형식이 정해진 정형 데이터(formal data)와 형식이 정해지지 않은 비정형 데이터가 있다. 페이스북, 트위터 등 소셜 네트워킹 서비스(SNS, 누리소통망 서비스)의 확산으로 데이터베이스에 잘 정리된 데이터가 아닌, 웹 문서, 이메일, 소셜 데이터 등 비정형 데이터가 주를 이루고 있다.

[네이버 지식백과] 비정형 데이터 [informal data, 非定型-] (IT용어사전, 한국정보통신기술협회)


비정형 데이터 마이닝의 개념

비정형 데이터를 정련 과정을 통해 정형 데이터로 변환하고 분류, 군집화, 회귀분석, 이상탐지 등의 기법으로
유의미한 정보를 추출하는 기법


비정형 데이터 마이닝의 유형

유형 설명
텍스트 마이닝 자연어 처리 방식을 이용한 정보추출 기법으로 특정 키워드나 문맥을 기반으로 의미를 
추출하는 분석기법
오피니언 마이닝 소셜 미디어에서 긍정/부정/중립을 구분하여 선호도를 판별하는 기술로 분석 대상인
키워드로 빈도수를 측정하는 분석 기법
사회연결망 분석 소셜 네트워크 서비스에 내포된 사용자간의 관계를 분석하는 기법
군집 분석 변화가 많은 대상 집단을 일정한 군집으로 나눠 특성을 분석하고 타 집단과의 지리를
관측하기 위한 분석기법



사회연결망 분석의 개념

  설명
개념 개인과 집단들 간의 관계를 노드와 링크로서 모델링해 그것의 위상구조와 확산 및 진화과정을
계량적으로 분석하는 기법
개념도


사회연결망 분석 표현 방법

구분 설명  
집합론적 방법 집합 X={X1} 관계 쌍 A,B 
A={(X1, X2), (X2, X1),(X4, X2),(X3, X1) }
B={(X1, X2), (X2, X1), (X3, X4),(X4, X3 }
각 객체들의 관계를 관계쌍으로 표시
그래프 이용방법
객체는 노드, 객체간 연결망은
선(Edgee)으로 표현
행렬 이용 방법
각 객체를 행렬의 행과 열에 대칭적
으로 배치



사회연결망 분석 기법

분석기법 유형 설명
중심성
(Centrality)
연결정도 중심성 
(Degree)
- 한도드에 직접적으로 연결된 노드 합으로 얻어진 중심성
- 노드가 중심에 위치하는 정도를 계량화
- 링크에 방향성이 있는 경우 in-degree (내향성), out_degree(외향성)
  로 분류

  𝐶′𝐷(𝑖)=𝐶𝐴(𝑖)/𝑛-1                   ,n:네트워크 내 전체 노드 수
근접(인접) 중심성
(closeness)
- 간접적으로 연결된 모든 노드 간 거리 합산한 지표

  𝐶′𝑐(𝑖)=(𝑛−1)𝐶𝑐(𝑖)
매개(사이) 중심성
(Betweeness)
- 매개자 혹은 중재자 역할의 정도를 측정한 지표

 𝐶′𝐵(𝑖)=𝐶𝐵(𝑖) / (n−1)(n−2)/2
위세 중심성
(Elgevector)
- 연결된 노드의 중요성에 가중치를 부여한 지표
밀도
(Density)
연결정도
(Degree)
- 한 노드와 직접적으로 연결된 노드들의 수
포괄성
(Inclusiveness)
- 한 연결망 내에 서로 연결된 행위자들의 수
- 한 연결망의 전체 노드수에 격리된 점들의 수를 제외하고 남은
  수로 계산
중심화(집중도)
(Centralization)
연결정도 (Degree)
근접, 중개 중심화
- 네트워크 전체 연결망의 형태가 중앙에 집중된 정도를 분석

 

728x90
반응형
LIST
728x90
반응형
SMALL

비정형 데이터란?

형식이 정해지지 않은 데이터. 데이터는 형식이 정해진 정형 데이터(formal data)와 형식이 정해지지 않은 비정형 데이터가 있다. 페이스북, 트위터 등 소셜 네트워킹 서비스(SNS, 누리소통망 서비스)의 확산으로 데이터베이스에 잘 정리된 데이터가 아닌, 웹 문서, 이메일, 소셜 데이터 등 비정형 데이터가 주를 이루고 있다.

[네이버 지식백과] 비정형 데이터 [informal data, 非定型-] (IT용어사전, 한국정보통신기술협회)


비정형 데이터 마이닝의 개념

비정형 데이터를 정련 과정을 통해 정형 데이터로 변환하고 분류, 군집화, 회귀분석, 이상탐지 등의 기법으로
유의미한 정보를 추출하는 기법


비정형 데이터 마이닝의 유형

유형 설명
텍스트 마이닝 자연어 처리 방식을 이용한 정보추출 기법으로 특정 키워드나 문맥을 기반으로 의미를 
추출하는 분석기법
오피니언 마이닝 소셜 미디어에서 긍정/부정/중립을 구분하여 선호도를 판별하는 기술로 분석 대상인
키워드로 빈도수를 측정하는 분석 기법
사회연결망 분석 소셜 네트워크 서비스에 내포된 사용자간의 관계를 분석하는 기법
군집 분석 변화가 많은 대상 집단을 일정한 군집으로 나눠 특성을 분석하고 타 집단과의 차리를 관측
하기 위한 분석기법



텍스트 마이닝 개념

개념 다양한 문서형태의 비정형 데이터를 가져와 문서의 단어별 행렬을 만들어 추가적인 분석이나 데이터
마이닝 기법을 적용하여 의사결정을 지원해주는 방법
기능 문서요약 (summarization) 문서의 내용을 추출하여 요약
문서분류 (classification) - 문서의 내용을 주어진 키워드에 따라 자동으로 구조화
  분류
- 지도학습
문서군집 (clustering) - 문서들을 분석하여 동일한 내용의 문서들을 묶는
  기법
- 자율학습`
특성추출 (feature extraction)

- 문서내 사용자가 원하는 정보, 특성을 자동으로 
  추출
- 메타데이터 추출

위에 표로 텍스트 마이닝에 대해서 정의를 했지만 그리 맘에 와닿지는 않는 설명이다.
대신 사례를 들어서 살펴보면 확실하게 개념이 잡힐것으로 기대한다.
이 텍스트 마이닝은 이미 여러 분아에서 많이 사용되고 있는 기법이다. 주로 광고,정치,관광 분아에서 많이 이 
기법을 사용해서 여러가지 정책이나 아이디어, 여론분석등에 사용하고 있다.

텍스트 마이닝

위 그림은 산업통상자원부의 7월 수출입 동향, 전력 공급 능력, 유통업체 매출 동향 등 3개의 뉴스의 키워드를 뽑아내
만든 그림이다.
. 뉴스에서 가장 많이 언급된 단어들을 빈도에 따라 크기를 달리해 표현하고 있는데
이 그림으로 20187월 한 달간 수출입 동향, 전력 수급, 반도체에 대한 내용이 산업부의 주요 쟁점이었다는 것을 알 수 있다. 이것이 바로 텍스트 마이닝이다. 

[출처] 빅데이터 기술의 숨은 조력자, 텍스트 마이닝|작성자 산소

이런 텍스트 마이닝을 수행할려면 당연히 주제에 해당하는 문서,기사,SNS 등의 Text 내용을 수집해야겠죠.
그런다음 이 Text의 내용을 정제하는 즉, 조사 같은걸 없앤다던지.. 특정 패턴을 제거한다던지..하는 전처리작업을
진행해야 한다.  그 다음에는 유사단어나 공통어간을 단어들을 통합하고 여기서 단어(word) 들을 뽑아내는
단계를 거치게 된다. 그리고 이 추출된 단어들간의 연관성분석(예, prioir분석) 등을 해서 최종 시각화작업을
통해 사용자에게 제공하게 된다.
아래 내용은 이러한 과정을 R을 기준으로 표로 다시 정리해봤다.


텍스트 마이닝의 기본 분석절차 (R 기준)

분석절차 기술요소 (R 사례) 설명
데이터 수집 HTML Parsing, API 분석에 사용 가능한 텍스트 데이터 수집
전처리 및 가공 Corpus 데이터 정제, 통합, 선택, 변환하는 구조화 작업 수행
데이터가 구조화된 단계로 더 이상의 절차 없이 데이터 마이닝
알고리즘에서 활용하는 상태
tm_map Corpus 데이터 전처리및 가공
(문장부호 제거, 특정 패턴 제거 및 대체)
Stop word 분석 시 의미없는 특정 단어(조사) 제거
자연어 처리 Stemming 공통 어간을 가지는 단어 통합
KoNLP 한글 텍스트 데이터에서 단어 추출
TDM 구축 Term Document Matrix 분석 대상의 문장, 단어를 열과 행의 매트릭스로 표현
Dictionary 분석할 단어를 별도의 매트릭스 사전으로 정의
분석 및 시각화 Assortion 특정 단어간 연관성 분석, Apriori 분석
워드 클라우드 메타 데이터에서 얻어진 단어들을 분석하여 중요도나 인기도등을
고러하여 시각적으로 웹사이트에 표시하는 방법
감성분석 단어의 긍정, 부정 여부에 따른 추이 분석, 오피니언 마이닝

[출처] 118회 정보관리기술사 기출문제풀이집 (117회어우림동기회)

728x90
반응형
LIST
728x90
반응형
SMALL

정보시스템감리사 자격증을 2016년에 취득했지만 당장 쓸려고 한건 아니었기 때문에 
계속 직장생활을 하고 있는 중에 .. 회사 업무도 짜증나고 회사 미래도 불투명하고
정말 회사 다니기 싫다는 생각이 올해는 무지 들었다.. 그러던 중에 나중에 감리시장에
뛰어들 때를 대비해서 미리 경험을 해보고자 감리사 동기분한테 소개 부탁을 해서
하 감리법인과 연결이 되었다.. 처음에는 종료감리에 투입되기로 했으나 나도 감리경험이
없는 상태이고 감리법인도 설계단계가 아닌 종료단계에 초짜를 투입하기에는 부담감이
있었기에 감리 대신 소스코드 보안약점진단 업무에 비상근 전문가 자격으로 투입되었다
나도 부담 백배였는데.. 소스코드 보안약점 진단은 훨 부담이 없다고 해서 다행..
단 대전으로 출장을 가야하는 일정이었다. (물론 회사에는 5일 연차 사용. 이판사판)
복장도 편한 정장이라고 하는데..어느정도 수준인지도 모르겠고 집에 양복도 없었기에
주말에 마트가서 세미정장 한벌과 와이셔츠 2벌을 장만했다.
(실제 가보니 그정도 까지는 필요없고 아래는 양복바지만 입고 위에는 꼭 와이셔츠나
양복상의가 필요 없어보였다.. 그냥 안에 셔츠에 바깥에 조끼나 니트 정도 입어도 될듯..)
그리고 캐리어를 가져가야할지 말지 고민하다가 그냥 스포츠가방에 넣어서 갔는데
다른 감리사분들은 캐리어을 가져오셨다.. 이것도 담에 참고..
월요일 아침에 일찍 서울역으로 가서 대전행 KTX를 타고 대전에 9시쯤 도착해서
감리사 분들과 같이 택시타고  감리장소로 갔다. 
다른 감리사분들은 이전에 설계단계 감리 때 와보셨기 때문에 다 능숙하게 자리잡으시고
노트북 꺼내서 바로 업무 시작.. 나는 회사에서 준 노트북을 키고 이전에 연습해본 
다른 소스진단결과를 보면서 긴장을 풀고 있었다.
회사에서 준 노트북은 주로 소스코드 보안약점 진단업무 전용 노트북으로서 안에
진단툴이 설치되어 있다.. (이 진단툴이 약 5천만원 한다고 함.)
오후에 점심먹고 사업자PM에게 소스 달라고 했고 PM은 정리해서 내일 오전에 드리겠다고
해서.. 오후는 그냥 놀았음.
퇴근은 5시 30분쯤에 일찍.. 아마도 대전 시내가 차가 막혀서 30분 미리 나가고 대신 담날
30분 일찍 8시 30분까지 출근했다 
모텔에 와서 방 배정받고 .. 낮설은 모텔방에서 혼자 자는데..첫날은 긴장해서 그런지 10시쯤
잠들었다. (이후 점점 적응하면서 취침시간이 11시, 12시, 1시로 늘어남. ㅋㅋ)
둘째날 오전에도 소스를 안줘서.. 좀 짜증이 나기 시작함.. 할일도 없어서.. 
오후에 드디어 소스를 받아서 진단툴에 넣고 냅다 돌렸다.. 
어떤 결과가 나올지 내심 기대가 되었다.. 보통 툴 돌리면 취약점이 2~4천개 정도 나오는 거같다.
진단 결과 2천여개가 나왔지만 다행이 위험도가 높은건 11건 밖에 안되고 중간껏도 120 개정도
나머지 95%가 낮은 위험도 였다.

진단툴은 생각보다 쓰기는 괜찮았다...
위와 같이 진단결과가 나오고 오른쪽에는 해당 소스 위치가 나오고 클릭하면 아래와 같이 해당 소스및 취약점 위치가
나온다. 

위에서 해당 취약점 라인을 클릭하면 우측에 아래와 같이 취약점 설명 및 조칩  방법에 대해서도 잘 나와있다.


각 위험도 별로 개별 소스를 확인해서 다음과 같이 3개로 분류를 했다.
  ① 오탐 - 취약점이 아닌데 진단툴이 그냥 syntax로 판단하다보니깐 취약점으로 잘못 탐지
  ② 예외처리 - 사업자가 개발한 소스가 아니거나 상용소프트웨어의 소스인 경우
  ③ 보안약점 - 위 두경우가 아닌 진짜 수정이 필요한 취약점

물론 2천여개 소스파일을 다 볼수는 없다.. 보다보면 같은 패턴이 왕창 나오기 때문에 나머지는
같은 분류로 판정하면 된다.
예외처리 건은 사업자 PM을 불러서 설명을 들어야 알수 있는 부분이 많다. 요 때 사업자랑
서로 인정 즉 합의가 되어야 한다.
이 과정을 통해서 3가지 분류를 확정한 다음 사업자PM에게 보안약점을 감리기간내에 최대한
조치해줄것을 요청한다. 그러면 사업자측은 수정을 할수 있는 건 최대한 수정을 해서 다시
소스파일을 준다. 그러면 이 소스파일을 가지고 2차 진단을 수행해서 감소된 취약점을
정리해서 최종 보고서에 1차 진단때 몇개가 검출되었고 감리기간내에 몇개가 수정되었고
나머지 잔여취약점이 몇개가 남았는지 작성해서 제출하면 된다.
다행이 이 사업자는 이전에 몇번 소스코드 보안취약점 진단을 했던 소스라서 아주 크리티컬한
취약점.. 예를 들어 SQL Injection, XSS 같은 취약점은 안나왔다. 

나에게는 어쩌면 정말 소중한 경험이었다..
비록 감리는 아니었지만 그래도 옆에서 분위기는 조끔 파악했고..어떤식으로 감리가 진행되고
종료보고는 어떤식으로 하는 건지도 배울수 있는 좋은 기회였다.
같이 감리수행하시는 분들은 나보다 연배가 한참 많으셨다.. 나는 거의 영계 수준.. ㅋㅋ
(참고로 나는 49세)
이놈의 회사는 맘에 안들어서 당장 감리법인에 가고싶지만.. 급여수준이 넘 차이가 나서
아직까지는 이 망할놈의 회사에 붙어있어야 한다..
옆에서 본 검리업무의 강도는 센편은 아니었다.. 어떻게 보면 여유가 있어 보이기도 하고..
편해 보이기도 했다.. 
내년에는 상반기에 설계감리부터 참여하고 하반기에 종료감리까지 한번 해보는게
목표다.

728x90
반응형
LIST
728x90
반응형
SMALL

SW개발보안가이드중 구현단계에서의 점검항목은 크게 7가지 이다.  (입보시에코캡아)
  1. 입력데이터 검증 및 표현
  2. 보안기능
  3. 시간 및 상태
  4. 에러처리
  5. 코드오류
  6. 캡슐화
  7. API 오용
       7-1.DNS Lookup 에 의존한 보안결정
       7-2. 취약한 API사용

이 장에서는 "7.API 오용" 에 대한 점검항목을 설명한다.


7-1.DNS Lookup 에 의존한 보안결정

구분 설명
원인/영향 DNS Lookup 명령어를 통해 얻은 도메인명을 가지고 유효성을 판단하는 경우 DNS 위변조시에는
잘못된 도메인명에 의해서 트래픽이 공격자를 경유하게 될 수도 있고, 공격자가 마치 동일 도메인에
속한 서버인 것처럼 위장할 수 있다
대응 보안결정에 DNS 조회결과를 사용하지 않는다. -> IP주소를 직접 참조한다.

취약)
String ip = req.getRemoteAddr();
InetAddress addr = InetAddress.getByName(ip); <-- ip에 대한 도메인명을 조회
if (addr.getCanonicalHostName().endWidth('trustme.com")) {  <-- 조회된 도메인명으로 체크
      ………….
}

안전)
String ip = req.getRemoteAddr();
if (ip == null || "".equals(ip)) return;
String trustedAddr = "127.0.0.1" ;
if (ip.equals(trustedAddr)) {    <-- ip 주소값으로 체크
       .........
 }



7-2. 취약한 API사용

구분 설명
원인/영향 ① J2EE 애플리케이션이 컨테이너에서 제공하는 자원연결관리를 사용하지 않고 직접 제작하는 경우
② J2EE 애플리케이션이 프레임워크 메소드를 호출하지 않고 Socket을 직접 사용하는 경우
③ J2EE 애플리케이션에서 System.exit() 사용은 컨테이너까지 종료시킨다. 
대응 ① 컨테이너에서 제공하는 자원연결관리 기능을 사용한다
② Socket 을 직접 사용하지 않고 프레임워크 메소드를 호출하여 사용한다.
③ J2EE 애플리케이션에서 System.exit() 을 사용하지 않는다.

취약) conn = DriverManager.getConnection(url, user, pw);   <-- 자원에 대한 직접 연결 하고 있음
안전) DataSource datasource = (Datasource) ctx.lookup(CONNECT_STRING);  <-- 연결 스트링
        conn = datasource.getConnection():  

취약) socket = new Socket ("kisa.co.kr", 8080) ;    <-- 소켓으로 직접 연결 시도
안전) URL url = new URL ("http://127.0.0.1:8080/DataServlet");
       URLConnection urlConn = url.openConnection();

취약) catch (EXception e) {
           System.exit(1);
       }

 

728x90
반응형
LIST
728x90
반응형
SMALL

SW개발보안가이드중 구현단계에서의 점검항목은 크게 7가지 이다.  (입보시에코캡아)
  1. 입력데이터 검증 및 표현
  2. 보안기능
  3. 시간 및 상태
  4. 에러처리
  5. 코드오류
  6. 캡슐화
     
6-1.잘못된 세션에 의한 데이터 정보 노출 (싱글톤 멤버변수)
      6-2. 제거되지 않고 남은 디버그 코드
      6-3. 시스템 데이터 정보 노출
      6-4. Public 메소드로부터 반환된 Private 배열  (Get함수)
      6-5. Private 배열에 Public 데이터 할당 (Set함수)
  7. API 오용

이 장에서는 "6.캡슐화" 에 대한 점검항목을 설명한다.
(두음 : 잘제시PP)



6-1.잘못된 세션에 의한 데이터 정보 노출 (싱글톤 멤버변수)

구분 설명
원인/영향 다중스레드환경에서 Servlet, JSP, Controller 등 싱글톤으로 존재하는 객체들의 멤버변수가
여러 스레드에 의해 공유되면서 다른 스레드에게 정보를 노출시킬 수 있다.
대응

① 싱글톤 패턴을 사용하는 경우, 변수 범위(scope)에 주의하여 사용한다
② java에서 HttpServlet 클래스의 하위클래스나 JSP, Controller 에서 멤버변수를 선언하지 
   않도록 하고 필요한 경우 지역변수를 선언하여 사용한다

취약) <%! 
             String username = "/";   <-- 멤버변수로 선언
       %>

안전) <%
             String username = "/";    <-- 지역변수로 선언
       %>
취약) 
 @controller
public class TrendForecastController {
   pirvate  int  currentPage = 1 ;<-- Controller에서 멤버변수로 선언되어 스레드간 공유
   public void doSomething(HttpServletRequest request) {
        currentPage = integer.parseInt(request.getParameter("page"));
   }

취약)  
@controller
public class TrendForecastController {
    public void doSomething(HttpServletRequest request) {
         int currentPage = integer.parseInt(request.getParameter("page")); <-- 지역변수
         }
  }



6-2. 제거되지 않고 남은 디버그 코드

구분 설명
원인/영향 디버그 용도로 삽입된 코드가 제거되지 않고 남아 있어서 공격자가 그 정보를 이용해서 공격가능
대응 ① SW배포전 반드시 디버그 코드를 삭제한다.
② 디버그 용도로 개발한 main()함수는 디버깅이 끝나면 삭제한다.



6-3. 시스템 데이터 정보 노출

구분 설명
원인/영향 예외 상항 발생시 오류처리가 제대로 이루어지지 않아서 시스템의 오류메시지가 사용자에게
노출되어 내부시스템, 데이터베이스, 프로그램 구조에 대한 정보가 노출될 수 있다.
  ->"에러처리 4.1 오류메시지를 통한 정보노출" 과 비슷..
대응 ① 예외처리시 시스템정보를 노출하는 getMessage() 함수 사용을 금한다.
② 시스템 설정을 통해 오류가 발생하는 경우 default 오류 페이지가 노출될 수 있도록 한다.

취약) catch (IOException e) {
           System.err.print(e.getMessage());
       }

안전) catch (IOException e) {
           logger.error ("IOException Occurred!");
       }



6-4. Public 메소드로부터 반환된 Private 배열  (Get함수)

구분 설명
원인/영향 private으로 선언된 배열을 public으로 선언된 메소드를 통해 반환하는 경우 그 배열의 레퍼런스가
외부에 공개되어서 외부에서 악의적으로 그 캡슐화된 배열의 값을 수정할수 있다.
대응 ① 배열 반환시 배열의 복제본을 반환한다.
② 배열을 그대로 반환하는 경우라면 수정을 제어하는 별도 Public 메소드를 선언하여 사용한다.

취약) private String[] colors ;      <-- private 배열 멤버변수 선언
       public String[] getColor() {
            return this.colors;       <-- 배열 멤버변수를 그대로 리턴
        }

안전) private String[] colors ;      <-- private 배열 멤버변수 선언
       public String[] getColor() {
            String[] copyArray = null;  <-- 복제본 변수 선언
            if (this.colors != null) {
                 copyArray = new String[this.colors.length];
                 for (int i = 0 ; i < this.colors.length ; i++)
                 {
                   copyArray[i] = this.colors[i] ;<-- 복제본 변수에  멤버변수값을 복사
                  }
                 return copyArray;       <-- 복제본 변수 리턴
       }



6-5. Private 배열에 Public 데이터 할당 (Set함수)

구분 설명
원인/영향 Public 메소드에 입력된 데이터를 Private 배열에 저장하는 경우 Private 배열의 레퍼런스가
공개되어 외부에서 이 레퍼런스를 이용해서 private배열의 값을 임의 수정할 수 있다.
대응 ① Public함수에서 데이터를 전달 할 때 "레퍼런스"가 아닌 "값" 자체를 전달해서
    Private배열에 할당함으로써 Private멤버로서의 접근권한을 유지한다.

취약) private String[] datas ;      <-- private 배열 멤버변수 선언
       public void setDatas (String[] datas) {
            this.datas = datas <-- 외부에서 입력한 배열데이터를 그대로 멤버변수에 셋팅
        }

안전) private String[] datas ;      
       public String[] setDatas (String[] datas) {
            if (datas != null) {
                 this.datas =  new String[datas.length];
                 for (int i = 0 ; i < datas.length ; i++)
                 {  
                     this.datas[i] = datas[i] ;   <-- 멤버변수에 값을 복사
                  }  
       }

 

728x90
반응형
LIST
728x90
반응형
SMALL

SW개발보안가이드중 구현단계에서의 점검항목은 크게 7가지 이다.  (입보시에코캡아)
  1. 입력데이터 검증 및 표현
  2. 보안기능
  3. 시간 및 상태
  4. 에러처리
  5. 코드오류
      5-1. Null Pointer 역참조
      5-2. 부적절한 자원 해제
      5-3. 해제된 자원 사용
      5-4. 초기화되지 않은 변수 사용

  6. 캡슐화

  7. API 오용

이 장에서는 "5.코드오류" 에 대한 점검항목을 설명한다.
(두음 : 널부해초)


5-1. Null Pointer 역참조

구분 설명
원인/영향 Null로 설정된 참조변수의 주소값을 참조하는 경우 공격자는 의도적으로 널포인트 역참조를 
유발하여 그 결과로 발생하는 예외상황을 이용하여 추후의 공격을 계획하는데 사용할 수 있다
대응 ① 참조변수를 레퍼런스하기전에 NULL인지 검사한다

취약) public static int cardinality (Object obj, final Collection col) {
         if (obj.equals("aaa")) {  <-- object 파라미터값을 null검사 안하고 바로 사용
         }

안전) public static int cardinality (Object obj, final Collection col) {
         if (null != obj && obj.equals("aaa")) {  <-- object 파라미터값을 null검사
         }



5-2. 부적절한 자원 해제

구분 설명
원인/영향 자원(메모리,DB연결,파일..) 들을 사용후 반드시 해제하여야 하는데 부적절한 로직 및 코드누락으로
자원해제가 안될경우 자원고갈로 인해 오류가 발생한다
대응 ① 자원할당후 반드시 자원해제가 되도록 코드를 작성한다
② 자바의 경우 자원해제코드는 finally 블록에 기술해서 누락되지 않도록 한다


5-3. 해제된 자원 사용

구분 설명
원인/영향 C,C++ 에서는 개발자가 자원을 직접 해제해야하는 경우 해제된 자원을 다시 해제하거나
해제된 자원을 다시 사용하는 경우 오류발생
취약) free(temp);
       stmcpy(temp, argv[1], BUFFER_SIZE-1);   <-- temp해제후 다시 사용
대응 ① 자원해제 후 그 메모리를 참조하고 있던 포인터를 참조 추적이나 형변환
  , 수식에서의 피연산자 등을 사용하여 해제된 메모리에 접근하지 못하도록 한다.
② 자원해제 후 포인터에 NULL을 저장하거나, 다른 적절한 값을 저장하면 예상치 못한 
   코드의 실행을 막을수 있다



5-4. 초기화되지 않은 변수 사용

구분 설명
원인/영향 C언어에서 스택 메모리에 저장되는 지역변수는 생성시 자동으로 초기화 되지 않는데
, 이 변수를 그냥 참조할 경우 이전에 이 메모리에 저장되어 있던 데이터를 의도치 않게
참조하게 되어 악성코드가 실행될 수 있다
대응 ① 모든 변수는 사용전에 반드시 올바른 초기값을 할당한다
취약) int x , y ;
안전) int x = 0 , y = 0 ;



728x90
반응형
LIST
728x90
반응형
SMALL

SW개발보안가이드중 구현단계에서의 점검항목은 크게 7가지 이다.  (입보시에코캡아)
  1. 입력데이터 검증 및 표현
  2. 보안기능
  3. 시간 및 상태
  4. 에러처리
      4-1. 오류메시지를 통한 정보노출
      4-2. 오류 상황 대응 부재
      4-3. 부적절한 예외 처리

  5. 코드오류

  6. 캡슐화
  7. API 오용

이 장에서는 "3.에러처리" 에 대한 점검항목을 설명한다.


4-1. 오류메시지를 통한 정보노출

구분 설명
원인/영향 오류메시지에 시스템정보와 같은 민감한 정보가 노출되어 공격에 활용할 수 있다.
취약) e.printStackTrace();  <-- 스택정보가 노출됨.
안전) logger.error("ERROR-01 : 파일 열기 에러");  <-- 별도 에러코드 정의
대응 ① 시스템오류 메시지 대신에 별도의 오류메시지를 정의하여 출력해준다.

 

4-2. 오류 상황 대응 부재

구분 설명
원인/영향 발생한 오류에 대해서 아무런 조치를 하지 않아 프로그램이 비정상적인 상태로 실행되는 겅우

취약) catch (Exception e) {
          // do nothing
       }
   
안전) catch (Exception e) {
          s.setMessage(e.getMessage());  <-- 원래 e.getMessag()는 시스템정보 노출
          return (makeLogin(s));
       }    
안전) catch (Exception e) {
         logger.error("ERROR-01 : 파일 열기 에러");  <-- 별도 에러코드 정의
       }    
대응 ① 발생오류별로 적절한 에러처리 루틴이 작성되어야 한다.
② 특별히 처리해야할 루틴이 없는 오류라 하더라도 
    logger.error("에러상황에 대한 간단한 메시지 또는 에러코드") 가 수행될수 있어야한다



4-3. 부적절한 예외 처리

구분 설명
원인/영향 모든 오류에 대해 하나의 방식으로 예외처리를 하는 경우 각각의 상황에 따라 적절한 예외처리를 
할수 가 없어서 부적절한 Resource 관리로 인해 시스템이 중지될 수 있다.
대응 ① 각각의 예외상항에 대해 적절한 예외처리 코드를 수행할수 있도록 한다

취약) catch (Exception e) {
          System.err.println("Exception : " + e.getMessge());
       }

안전) catch (MalformedURLExcepton e) {
       }
       catch (IOExcepton e) {
       }
       catch (ParseExcepton e) {
       }
       finally {
       }



 

728x90
반응형
LIST

+ Recent posts