[제4호(1)] 2023년 주요 개인정보보호 서베이 보고서 분석 1. 개요 2. 조직/개인 개인정보보호 관련 서베이 (1) CISCO - 개인 정보 보호 벤치마크 연구 (2) AAG - 2023년 사이버 범죄 통계 조사 (3) Aspen Institute- 소비자 개인정보보호 준비 보고서 3. 개인정보보호 법규 관련 서베이 (1) Norton Rose Fulbright - 연간 소송 보고서 (2) Gartner - 마케팅 리더 설문조사 (3) DLA Piper- GDPR(개인정보보호 규정) 벌금 및 데이터 유출
[제4호(2)] ChatGPT의 등장과 주요국의 개인정보보호 규제 동향 1. 생성형 AI와 ChatGPT (1) 생성형 AI의 개념과 특징 (2) 생성형 AI의 장·단점 (3) ChatGPT의 등장 2. ChatGPT에 대한 주요국의 개인정보보호 규제 동향 (1) 주요국의 ChatGPT 사용금지 검토 (2) OpenAI의 대응 (3) 주요국의 AI 규제를 위한 법안 마련 3. 요약 및 시사점 (1) 요약 (2) 시사점
목차 1. 프리다(Frida)란? 2. 프리다의 주요 기능 3. 프리다 환경 구축 - 녹스(Nox) 앱플레이어 설치 - 아나콘다 파이썬 환경 구축 - 프리다 설치 및 실행 4. 프리다 기능 살펴보기 - 기본 명령어 활용(Frida CLI 이해) - 기본 명령어 활용(프로세스, 트레이스, 디바이스 제어) - 기본 명령어 활용(프로세스 중지) 5. 프리다 기본 문법 - Java.perform(fn) - Java.use(className) - Java.choose(className, callbacks) - Java.enumerateLoadedClasses(callbacks) - setImmediate(fn) - Overloading - 프리다 CLI 활용 자바스크립트 파일 사용 파이썬 바인딩 이해 프리다 챌린지로 연습해보기 프리다 실무 활용
5. 프리다 기본 문법
Java.perform(fn)
Java.use(className)
Java.enumerateLoadedClasses(callbacks)
Java.choose(className, callbacks)
setImmediate(fn)
Overloading
기본 뼈대 구조
Java.perform(fn)
현재 스레드가 가상머신에 연결되어 있는지 확인하고 fn을 호출
- Java.perform이 실행이 되면 fn 내부로 입력한 코드가 지정한 앱애 접근하여 실행하게 됨
Java.perform(function() {
/*
...
do sth
...
*/
})
Java.use(className)
Java.use ()는 변수와 메소드에 액세스 할 수 있는 클래스 객체를 반환
메소드 구현을 변경하려면 새로운 메소드로 덮어 써야 함
인스턴스를 반환하는 것이 아닌 클래스 객체를 반환함
- className 클래스를 사용하겠다고 선언
- 인스턴스를 다루기 위해서는 Java.choose라는 API를 사용해야 함
앱에서 사용하는 클래스와 연동되는 myClass를 정의
.implementation: 앱에서 정의된 메소드의 구현 내용을 재작성
Java.perform(function() {
var myClass = Java.use(com.mypackage.name.class)
myClass.myMethod.implementation = function(param) {
// do sth
}
}
myClass 내 myMethod 메소드를 다룸, implementation를 하여 myMethod를 재작성하여 진단자 마음대로 해당 메소드를 재작성
위의 코드는 parameter가 하나인 경우, 인자값이 두 개 이상이라면 function(p1, p2)로 기재
(기술적 조치방안) 분기별 보안 취약점 점검·제거, 실시간 모니터링 체계 및 IT자산 통합 관리 시스템 개발·구축, 보안장비(IPS 등) 구축·점검
(관리적 조치방안) 정보보호 인력·예산을 타사 수준까지 확대, CEO 직속 정보보호 조직 구성, 맞춤형 모의훈련 및 C레벨 포함 보안 필수교육
유출대상 시스템과 유출규모 확인
<LGU+ 주요 고객정보 처리시스템 개요도>
※ 고객인증 DB 시스템의 구성요소
○ 인증처리 서버 : 부가 서비스의 고객인증을 처리하는 서버
○ 인증관리 서버 : 인증처리 서비스의 설정(서비스 신규 생성 및 수정 등)을 관리하는 서버
○ 인증 DB : 전체회원 DB를 이용하여 실시간 동기화하여 운영 중인 DB
과기정통부와 KISA는 유출데이터의 컬럼, 데이터 내용 등이 위 3개 DB 시스템과 연관된 것으로 보고 해당 시스템들을 대상으로 사고원인 분석을 진행함
유출데이터의컬럼명(26개)과 3개 DB 각각의 컬럼명의 일치 또는 유사성 등을 분석
동일 컬럼명 22개, 유사 컬럼명 3개로 컬럼명이 가장 일치(혹은 유사)한 시스템은 ‘고객인증 DB’였음
유출규모와 관련하여서는, LGU+가 확보한 60만건(1.2.) 중에 동일인에 대한 중복 데이터를 제거하여 총 296,477명의 데이터를 확인
LGU+가 해커로부터 추가로 확보한 이미지로 된 데이터*에서 기존 60만건(1.2.)에 포함되지 않은 새로운 고객정보 1,039명을 추가로 확인
→ 모든 확보 데이터를 3개 DB 시스템의 현재 데이터와 비교한 결과,297,117명의 고객정보(399명은 확인이 불가능)가 유출되었음을 확인
고객 데이터의 유출시점 추정
'고객정보 변경시간(UPDATE_DTIME)' 컬럼 값을 근거로 유출 시점을 판단
관련 시스템의 로그가 남아있지 않아 특정하기 어려움
유출데이터의 마지막 업데이트는 2018년 6월 15일 03시 58분으로 해당 시점 직후 유출 파일이 생성된 것으로 추정됨
유출 경로 파악
당시 고객인증 DB 시스템의 웹 관리자 계정 암호가 시스템 초기 암호로 설정되어 있었음
시스템에 웹취약점이 있어 해당 관리자 계정으로 악성코드(웹셸*)를 설치할 수 있었음
관리자의 DB접근제어 등 인증체계가 미흡하여 해커가 웹셸을 이용하여 파일을 유출해나갈 수 있었음
* 웹셸: 해커가 원격에서 공격 대상 웹서버에 명령을 실행하는 방식의 공격방법
< 고객인증 시스템을 통한 유출 경로 시나리오 >
유출데이터를 악용한 2차 피해 가능성 판단
고객정보 유출로 인해 추가적으로 발생할 수 있는 2차 피해는 스미싱, 이메일 피싱, 불법로그인, 유심(USIM) 복제 등의 가능성
불법로그인: 비밀번호가 암호화되어 있음 / USIM 복제: 실제 USIM의 개인키가 있어야 함 → 피해 발생 가능성은 낮은 것으로 판단됨
◇ 디도스 공격으로 인한 LGU+의 피해 현황과 공격 특징, 피해 발생원인 파악
(1단계) LGU+ 대상 디도스 공격 발생 및 피해 현황 파악
(2단계) 디도스 공격 특징 및 유형 파악
(3단계) LGU+ 피해발생 원인 파악
디도스 공격 발생 및 피해 현황
LGU+ 광대역데이터망의 주요 라우터에 대한디도스 공격으로 1.29.(토)과 2.4.(일)에 5회에 걸쳐, 총 120분 간 LGU+의 유선인터넷,VOD, 070전화 서비스에 장애가 발생함
①G/W(GateWay Router) : 해외↔국내 네트워크 트래픽의 상호교환 역할수행 라우터 ② Core Router : 네트워크 중심에서 트래픽을 빠르게 처리하는 고성능 라우터 ③ IX(Internet eXchange) : 서로 다른 종류의 네트워크 간 데이터 트래픽을 교환하는 장비 ④ BB(BackBone Router) : 대규모 트래픽 전송을 효율적으로 처리하는 네트워크 장비 ⑤ Edge Router : 네트워크 가장자리(Edge)에서 가입자망과 연결된 라우터
공격자는 1월 29일에 3회 총 63분 동안 해외 및 국내 타 통신사와 연동구간(Internet eXchange)의 주요 네트워크 장비 14대(게이트웨이 3대, 라우터 11대)를 대상으로 디도스 공격을 함
이에 따라 전국 대부분에 서비스 장애가 발생함
< 디도스 공격으로 인한 피해현황 >
구분
1차 피해
2차 피해
3차 피해
4차 피해
5차 피해
공격시간
2023-01-29 02:56~03:15 (19분)
2023-01-29 05:43~06:05 (22분)
2023-01-29 17:58~18:20 (22분)
2023-02-04 16:57~17:40 (43분)
2023-02-04 18:07~18:21 (14분)
공격규모 (최대트래픽)
7Mpps*
5.7Mpps
7.4Mpps
4Mpps
21.2Mpps
공격대상
광대역데이터망 (유선망 코어라우터, 국제망 게이트웨이)
광대역데이터망 (유선망 지역 라우터)
공격 IP
변조된 공격IP로 확인 불가
공격유형
Syn Flooding
피해내역
유선 인터넷망과 IPTV, VOD, 070전화 서비스 불가 및 지연 ※ 무선/음성(LTE,5G)는 별도 망으로 피해 없었음
* PPS(Packet Per Second) : 초당 패킷(Packet) 수를 지칭
디도스 공격 특징 및 유형
공격자는 네트워크를 구성하는 통신사의 라우터 장비를 대상으로 공격을 시도하여 네트워크 장애를 유발시킴
라우터 장비에 다량의 비정상 패킷이 유입되었고 CPU 이용률이 대폭 상승*한 것으로 분석되어 이번 디도스 공격은 자원 소진 공격 유형으로 분석됨
공격자가 ‘Syn Flooding’기법**을 활용하여 공격 대상 라우터의 과부하를 유발함
* 평균CPU 이용률은 20% 미만이나, 공격 피해 당시 60~90%까지 3~4배 이상 증가
** 공격자 측이 통신 연결 요청 패킷인 Syn을 지속적으로 공격 대상에 보내고 공격 대상이 회신하는 Ack에는 응답하지 않아, 공격 대상 시스템이 통신 연결을 계속 대기하게 만들고 자원을 소모하게 만드는 공격기법
과학기술정보통신부와 외교부는 윤석열 대통령의 미국 국빈방문을 계기로 미래 국가 핵심전략기술로 주목받는 양자과학기술 분야에 대한 국가 차원의 전략적 협력체계와 협력확대 의지를 담은 '한-미 양자정보과학기술 협력 공동성명서' 서명을 통해 양자과학기술 선도국가 도약의 발판을 마련함
이종호 과기정통부 장관과 아라티 프라바카(Arati Prabhakar) 백악관 과학기술정책실(OSTP) 실장은 4월 25일 (화) 백악관(미국 워싱턴 디씨)에서 양자정보과학기술 협력 공동성명서에 서명함
< 공동성명 주요 내용 >
⦁ 한-미는 공동의 가치와 동맹을 바탕으로 양국 국민들의 평화와 번영을 위해 양자정보과학기술(QIST) 분야 협력 추진
⦁ 정부‧학계‧민간 부문 간 교류를 촉진하고, 민간 부문과 산업 컨소시엄을 참여시켜신뢰받는 글로벌 시장‧공급망 구축
⦁ 양국은 국제적 공조가 중요한 규제, 표준화 등을 논의할 양자 및 다자 간 기회를 창출하고 인력교류, 공동연구 기반 인력양성 도모
통화 내용으로부터 음성인식을 통해 전달받은 텍스트 데이터와 문자 내용을 이루는 텍스트를 기반으로 피싱 여부를 판단
자연어처리 기반으로 텍스트 중 의미 분석, 감정 분석 등이 복합적으로 작동하여 피싱과 관련된 요소가 있는지 검토
아래의 문법적 구조를 학습하여 통화/문자 내용 중 피싱으로 의심 가는 내용과 화자 간 발화 내용의 의도를 유추하거나 단어/문장 자체의 진위성을 대화 맥락 중 파악
기술개념도
기술 특징
한국어 통화/문자 내용이 전화망 데이터의 형태로 최적화되어 있지 않으므로 딥러닝이 어려움
제안서 본문에서 제시한 텍스트 데이터 추가 생성(augmentation)과 자기지도학습 등으로 파싱 여부를 판단하는 학습 예정
국내 기술 동향
경찰청과 삼성전자는 "전기통신 금융사기 근절을 위한 업무협약(MOU)"를 맺고, 인공지능 기반 보이스피싱 예방 기술 개발 중
후후앤컴퍼니는 성문분석, 위험 평가 모델 데이터베이스 등의 탐지 솔루션을 통해 IBK기업은행의 통화 중 AI-모니터링시스템을 강화하여 보이스피싱 피해를 예방하는 기술 연구를 진행, 금감원에서 수집된 1,500~2,000명의 보이스피싱 범인 목소리를 공유 받아 학습에 사용
2021년, 서울대학교 산학협력단은 실시간 통화내용 분석으로 음성·텍스트 딥러닝 기반 보이스피싱 예방 기술을 제안
한양대학교는 2010년 수신되는 통화의 코덱 파라미터를 기반으로 한 보이스피싱 탐지 기법을 제안
국외 기술 동향
미국 연방통신위원회(Federal Communications Commision: FCC)는 2020년 STIR/SHAKEN이라는 프레임워크를 개발하여 Caller ID 정보를 단말기 회사들로부터 인증을 받아 Caller ID 스푸핑 공격을 막을 수 있는 솔루션을 제안
일본의 후지쓰 기업과 나고야대학이 협업하여 보이스피싱을 방지할 수 있는 기술을 제안
- 이상진, "일본, 보이스피싱 피해방지 기술 개발" 해당 기술을 보이스피싱에서 발생되는 통화내용 데이터를 기반으로 음성인식 기술을 접목하여 판단 정확도를 높임
<자료> 삼정KPMG 경제연구원
* 대화형 AI 서비스가 IoT와 머신러닝 기술과 맞물려 보편화되고 시장규모 역시 커지고 있음
- 간혹, 잘못 알려진 오해 중 하나는 양자를 입자로 해석하는 것으로, 양자역학에서 양자(量子)는 입자(粒子)를 지칭하는 것이 아님
- “양자역학(量子力學)”은 아시아에서 가장 먼저 서양에 개항한 일본에서 “Quantum Mechanics”를 번역한 용어를 그대로 한국에서 받아들여서 통용된 것에서 기인 - 물리학에서의 입자(particle)는 electron(전자), positron(양성자), neutron(중성자), fermion(스핀이 반정수인 입자) 등 일반적으로 “~on”으로 끝남
※ 양자(量子)에서의 “자(子)”, 전자(電子), 양성자(陽性子), 중성자(中性子) 등의 “자(子)”가 동일한 한자어 “자(子)”를 사용한 것이 오해의 원인
- Quantum은 Quanta의 복수형으로써, 물리적으로 불연속적인 양을 의미하는 것으로 미시세계에서 관측되는 현상인 에너지, 운동량 등 불연속적인 물리량 현상 전반을 지칭 - 양자역학의 시초는 원자론에서 잉태한 것이 아닌 열역학의 흑체복사(Blackbody Radiation)를 플랑크(Planck)가 물리적 모델링한 것이 시초
Rayleigh-Jeans와 플랑크 흑체 복사(Blackbody Radiation)의 모델링 결과 비교
양자론은 크게 물리량(에너지, 운동량 등)의 양자화와 확률(입자 존재의 확률, 위치의 확률 파동성 등)로 해석
- (양자화) 불연속적인 물리량으로써, 대표적인 것은 에너지의 불연속성으로 이를 응용한 것이 레이저의 원리, 반도체 내의 전류 조절* 등이 대표적인 사례
* 반도체 전류는 확산(Diffusion) 및 장(Field)에 의한 전하의 운동 외(外) 에너지 양자화에 의한 에너지 장벽으로 조절
- (확률) 입자의 존재는 고전적으로 한 개의 질점(質點)이 아닌 파동성과 확률로 결정되는 것으로 대표적인 사례는 전자의 회절실험, 반도체 내의 전도대(Conduction Band) 전자수 분포, 터널링 효과 등이 있음
입자의 확률 파동성에서 중첩(Superposition)과 얽힘(Entanglement) 등의 개념이 파생
- 슈뢰딩거(Schrödinger) 방정식의 해(解), 파동함수(wave function)를 확률 파동론의 관점에서 해석하여, 불확정성 원리(uncertainty principle)가 도출되고 양자 중첩(superposition)*, 얽힘(entanglement) 개념이 파생되고 실험으로 증명**
* 측정 되기전 양자 상태는 허용 가능한 양자 상태의 조합으로 중첩
** John Clauser와 Stuart Freedman(1972)
< 중첩 및 얽힘 개념도 >
슈뢰딩거 고양이의 중첩상태 개념 / 광자 2개의 얽힘 예시자료 : https://theabingtonian.com/1678/features/schrodingers-cat-groundbreaking-crazy-or-both/
2개의 양자 중첩상태를 정보의 단위 비트로 활용한 것이 큐비트(qubit)이며, 양자 중첩상태와 얽힘의 특성을 활용하는 것이 양자 컴퓨팅
- 양자 중첩상태로 연산 정보를 인코딩하거나, 얽힘을 활용한 양자 고밀도 코드(superdense code)로 입력 정보에 해당하는 큐비트 값을 축소하는 등 고전컴퓨터에 비해 빠른 연산이 가능
< 큐비트 개념과 고전 비트와 양자 큐비트 비교 >
자료 : Basic Guide to Quantum Computing and Superposition(2018). (https://medium.com)
- 큐비트 / 고전 비트와 양자 큐비트의 비트 표현
글로벌 빅테크 위상 변화...FAANG 대신 MANTA 부상
FAANG: 페이스북(메타)·애플·아마존·넷플릭스·구글
- 2013년 9월 미국 경제 매체 CNBC 진행자 짐 크레이머(Jim Cramer)가 방송에서 'FANG(페이스북·아마존·넷플릭스·구글)'이라는 용어 사용
- 크레이머는 이 4개 기업을 '미래를 대표하고, 시장 지배적 지위를 가진 회사'라고 정의
- 월가에서는 여기에 스마트폰 시장을 선도하는 애플을 추가해 'FAANG'이라 불렀고, 미국 성장주와 빅테크를 대표하는 용어로 자리매김
MANTA: 마이크로소프트·애플·엔비디아·테슬라·알파벳
- CNN은 2022년 말 골드만삭스 자료를 바탕으로 'MANTA(마이크로소프트·애플·엔비디아·테슬라·알파벳)'라는 새로운 조어 제시
- 골드만삭스에 따르면 2022년 4월부터 S&P500 지수 상승 폭의 51%를 이들 5개 회사가 선도
마이크로소프트·애플, 미국 증시에서 차지하는 비중 최고치
- 지난 10년 동안 투자자들은 페이스북 모기업인 메타, 아마존, 애플, 넷플릭스, 구글 소유주인 알파벳 주식을 두루 매수
코로나19 이후 클라우드 성장세·챗GPT 열풍에 힘입어 MS 약진
- 마이크로소프트(MS)는 시가총액 기준으로 늘 상위에 포지셔닝해왔으나 PC 운영체제 '윈도' 이미지가 고착화되어 있어, 모바일 기반의 혁신 기업들로 꼽히는 FAANG에서 소외
- 그러나 팬데믹 이후 데이터센터 중요성이 배가되고 클라우드 서비스 '애저(Azure)' 매출이 가파르게 상승하면서 새로운 전환점 맞이
- 올해 초 챗GPT 열풍을 주역으로, 자사의 검색엔진, 애저, 윈도 오피스 제품군에 이미지 인식까지 가능한 GPT-4를 적용하는 등 생성형 AI 시장을 선도하고 있는 것도 경쟁력
목차 1. 프리다(Frida)란? 2. 프리다의 주요 기능 3. 프리다 환경 구축 - 녹스(Nox) 앱플레이어 설치 - 아나콘다 파이썬 환경 구축 - 프리다 설치 및 실행 4. 프리다 기능 살펴보기 - 기본 명령어 활용(Frida CLI 이해) - 기본 명령어 활용(프로세스, 트레이스, 디바이스 제어) - 기본 명령어 활용(프로세스 중지) - 프리다 기본 문법 프리다 CLI 활용 자바스크립트 파일 사용 파이썬 바인딩 이해 프리다 챌린지로 연습해보기 프리다 실무 활용
4. 프리다 기능 살펴보기
독립된 가상 환경으로 접속한 상태
frida-trace -i "open" -U com.android.chrome
Nox Chrome에서 동작 시 open() 함수에 대해 출력
open: Auto-generated handler at "C:\\Users\\user\\__handlers__\\libc.so\\open.js"
해당 경로로 open.js 파일 확인해보면,
onEnter할 때, open()이라는 함수를 출력하도록 되어 있음
onLeave는 별도 처리하지 않음
(py3) user@DESKTOP-JII5KL2 C:\Users\user\__handlers__\libc.so
$ type open.js
/*
* Auto-generated by Frida. Please modify to match the signature of open.
* This stub is currently auto-generated from manpages when available.
*
* For full API reference, see: https://frida.re/docs/javascript-api/
*/
{
/**
* Called synchronously when about to call open.
*
* @this {object} - Object allowing you to store state for use in onLeave.
* @param {function} log - Call this function with a string to be presented to the user.
* @param {array} args - Function arguments represented as an array of NativePointer objects.
* For example use args[0].readUtf8String() if the first argument is a pointer to a C string encoded as UTF-8.
* It is also possible to modify arguments by assigning a NativePointer object to an element of this array.
* @param {object} state - Object allowing you to keep state across function calls.
* Only one JavaScript function will execute at a time, so do not worry about race-conditions.
* However, do not use this to store function arguments across onEnter/onLeave, but instead
* use "this" which is an object for keeping state local to an invocation.
*/
onEnter(log, args, state) {
log('open()');
},
/**
* Called synchronously when about to return from open.
*
* See onEnter for details.
*
* @this {object} - Object allowing you to access state stored in onEnter.
* @param {function} log - Call this function with a string to be presented to the user.
* @param {NativePointer} retval - Return value represented as a NativePointer object.
* @param {object} state - Object allowing you to keep state across function calls.
*/
onLeave(log, retval, state) {
}
}
log('open()'); 를 다음과 같이 코드 변경하여
onEnter function의 args를 통해 호출 인수가 어떻게 접근이 가능한지 알아볼 것
(py3) user@DESKTOP-JII5KL2 C:\Users\user
$ frida-trace -i "open" -U com.android.chrome:privileged_process0
Instrumenting...
open: Loaded handler at "C:\\Users\\user\\__handlers__\\libc.so\\open.js"
Started tracing 1 function. Press Ctrl+C to stop.
/* TID 0x1132 */
9955 ms open(pathname=0xd6fb8a31flags=0x2)
/* TID 0x1133 */
9971 ms open(pathname=0xd6fb8a31flags=0x2)
/* TID 0x10d4 */
10010 ms open(pathname=0xd6fb8a31flags=0x2)
/* TID 0x10f4 */
32908 ms open(pathname=0x55833950flags=0x80000)
35102 ms open(pathname=0x55836060flags=0x80000)
fride.re > DOCS > API Reference - JavaScript API > find "Memory" 참조
목차 1. 프리다(Frida)란? 2. 프리다의 주요 기능 3. 프리다 환경 구축 - 녹스(Nox) 앱플레이어 설치 - 아나콘다 파이썬 환경 구축 - 프리다 설치 및 실행 4. 프리다 기능 살펴보기 - 기본 명령어 활용(Frida CLI 이해) - 프리다 기본 문법 프리다 CLI 활용 자바스크립트 파일 사용 파이썬 바인딩 이해 프리다 챌린지로 연습해보기 프리다 실무 활용
4. 프리다 기능 살펴보기
frida
프리다 CLI인 REPL 인터페이스, 신속한 프로토타이핑과 손쉬운 디버깅을 목표로 하는 도구
Download 혹은 Download 하단 아이콘 클릭 - OS 환경에 맞는 Installer 설치(64-Bit Graphical Installer (786 MB)
Anaconda 설치 도중, Advanced Options - Add Anaconda to my PATH environment variable 체크 후 Install
Destination Folder: C:\Users\user\anaconda3
[참고] ConEmu 설치: color scheme default 설정값 <ConEmu>
cmd 창에서 'conda --version', 'python --version' 입력하여 버전 확인
# 독립된 가상 환경 설정: 이름 py3, 버전 3.10
conda create -n py3 python=3.7
Downloading and Extracting Packages
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate py3
#
# To deactivate an active environment, use
#
# $ conda deactivate
목차 1. Mathworks 계정 생성 및 라이선스 설정 2. Polyspace 초기 화면 및 Code Prover 기본 3. 최대값 출력 프로그램 작성 - 메모리 동적 할당 4. 프로그램 Code Prover 분석 1) Non-initialized local variable 2) Illegally dereferenced pointer 3) Non-initialized variable
제품 선택: Polyspace Bug Finder + Polyspace Code Prover
필요 용량: 3.72 GB 정도
2. Polyspace 초기 화면 및 Code Prover 기본
terminal 연결하여, Polyspace 설정 경로로 이동 후, 실행
cd /Applications/Polyspace/R2023a/polyspace/bin
./polyspace &
실행 완료되면 하단 Polyspace R2023a 연결
Run-time Check 중
Red Check: 특정 에러가 100%로 발생하는 경우
Gray Check: Dead code, Unreachable code
Orange Check: 특정 에러에 대해 증명할 수 없는 경우
Green Check: 런타임 에러가 발생하지 않는 경우(정상)
Purple Category: Coding rules
3. 최대값 출력 프로그램 작성
arr 배열에 대한 초기값을 넣어주지 않아 에러 발생
// 초기 코드
#include <stdio.h>
int main(int argc, const char * argv[]) {
int n, arr[n];
printf("Enter full array size\n");
scanf("%d", &n);
printf("Enter values to store in the array\n");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int max = arr[0];
for (int j = 1; j < n; j++) {
if (max < arr[j])
max = arr[j];
}
printf("The maximum value of an array element is %d\n", max);
return 0;
}
arr 배열을 만들기만 하고 값을 넣어주지 않음 – 선언(Declare)의 상태
선언한 변수에 처음 값을 넣어 줌 – 초기화(Initialize)
초기화한 이후 변수에 값을 넣어 줌 – 할당(Allocaiton)
→ arr 배열 동적 할당 필요
메모리 동적 할당
컴퓨터 프로그램이 실행되는 런타임 도중 사용할 메모리 공간을 할당
동적 할당되는 메모리는 힙 영역에 생성
sizeof(int) 4byte 할당 * n
이후 동적 할당 메모리 해제(free)
// sol1
#include <stdlib.h> // malloc, free 함수가 포함된 헤더 파일
#include <strings.h> // memset 함수가 포함된 헤더 파일
int* arr = (int *)malloc(sizeof(int) * arr_size);
memset(arr, 0, sizeof(int) * arr_size);
free(arr);
malloc 할당 이후 memset 초기화하는 과정은 calloc 함수 하나로 대체 가능
// sol2
#include <stdlib.h> // calloc 함수가 포함된 헤더 파일
int* arr = (int *)calloc(0, sizeof(int) * arr_size);
// 1차 수정
//
// main.c
// week.04_SecureCoding
//
// Created by sehee on 2023/03/27.
//
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
int max(int* ptr, int n);
int main(int argc, const char * argv[]) {
// 최대값을 출력하는 프로그램, 배열은 동적 할당 받기
int arr_size;
// 첫번째 입력: 전체 배열 크기
printf("Enter full array size\n");
scanf("%d", &arr_size);
int* arr = (int *)malloc(sizeof(int) * arr_size);
// memset(arr, 0, sizeof(int) * arr_size);
// error
if (arr == NULL) {
printf("malloc error");
exit(1);
}
// 두번째 입력: 배열 내 저장할 함수 - 각 index에 해당 값 할당
printf("Enter values to store in the array\n");
for (int i = 0; i < arr_size; i++) {
scanf("%d", &arr[i]);
}
// 출력: 최대값
printf("The maximum value of an array element is %d\n", max(arr, arr_size));
free(arr);
return 0;
}
int max(int* ptr, int n) {
int max_val = ptr[0];
for (int i = 1; i < n; i++) {
if (max_val < ptr[i]) {
max_val = ptr[i];
}
}
return max_val;
}
4. 프로그램 Code Prover 분석
1) Non-initialized local variable
초기 변수(arr_size) 선언 후 초기화
int arr_size = 0;
2) Illegally dereferenced pointer
3) Non-initialized variable
max 함수의 ptr에 대해 초기화하지 않음(의미X) - 변경X
// type1
int max(int* ptr, int n);
// type2
int max(int n[], int size);
// 최종 코드
//
// main.c
// week.04_SecureCoding
//
// Created by sehee on 2023/03/27.
//
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
int max(int n[], int size);
int main(int argc, const char * argv[]) {
// 최대값을 출력하는 프로그램, 배열은 동적 할당 받기
int arr_size = 0;
// 첫번째 입력: 전체 배열 크기
printf("Enter full array size\n");
scanf("%d", &arr_size);
int* arr = (int *)malloc(sizeof(int) * arr_size);
// memset(arr, 0, sizeof(int) * arr_size);
// error
if (arr == NULL) {
printf("malloc error");
exit(1);
}
// 두번째 입력: 배열 내 저장할 함수 - 각 index에 해당 값 할당
printf("Enter values to store in the array\n");
for (int i = 0; i < arr_size; i++) {
scanf("%d", &arr[i]);
}
// 출력: 최대값
printf("The maximum value of an array element is %d\n", max(arr, arr_size));
free(arr);
return 0;
}
int max(int n[], int size) {
int max_val = n[0];
for (int i = 1; i < size; i++) {
if (max_val < n[i]) {
max_val = n[i];
}
}
return max_val;
}
목차 1. 프리다(Frida)란? 2. 프리다의 주요 기능 3. 프리다 환경 구축 - 녹스(Nox) 앱플레이어 설치 - 프리다(Frida) 주요 기능 이해 프리다 환경 구축 프리다 기능 살펴보기 프리다 기본 문법 프리다 CLI 활용 자바스크립트 파일 사용 파이썬 바인딩 이해 프리다 챌린지로 연습해보기 프리다 실무 활용
1. 프리다(Frida)란?
Ole가 개발한 DBI* 프레임워크
프로세스를 모니터/디버깅하는 데 사용할 수 있는 툴킷
다양한 플랫폼에서 프로세스에 대한 인젝션이 가능, 확장성이 큼
자바스크립트를 Native App에 삽입 가능
* DBI: Dynamic Binary Instrumentation, 앱이 실행 중인 상태에서 코드 명령어를 삽입해 동적으로 바이너리 프로세스를 추적·분석·디버깅하는 도구
2. 프리다의 주요 기능
프리다를 기반으로 사용하는 도구: AppMon*, Needle**
함수 후킹(특정 함수에 연결하여 반환 값 변경 및 함수 재작성 가능)
실행 중인 애플리케이션의 디버깅 수행 가능(실행 중인 함수를 추적하여 함수 재작성 가능 - 로그 출력, 내부 로직 변경 등)
힙 메모리 내 객체 인스턴스 검색 및 사용 가능(프리다 기본 문법인 java.choose라는 함수를 사용하여 손쉽게 힙을 스캔)
실시간 트래픽 스니핑 또는 암호 해독(암호화되기 전의 값을 변조)
탈옥 또는 루팅되지 않은 단말기에서도 사용 가능(제한적이므로 추천하지 않음)
* AppMon: 앱의 시스템 API 호출을 모니터링하고 변경하는 자동화된 프레임워크(macOS, iOS, Android OS) - system 및 API 호출을 모니터링할 수 있음
* Needle: iOS 보안 테스팅 프레임워크(안드로이드의 드로저와 유사)
3. 프리다 환경 구축
필요 도구: 녹스 앱플레이어(Nox), 아나콘다(파이썬), 프리다, 프리다 서버(Android)
녹스(Nox) 앱플레이어 설치
무료 안드로이드 에뮬레이터, 실제 디바이스와 유사한 환경에서 진단이 가능하며, 멀티 앱 플레이어 기능으로 다수 앱 동시 진단 가능
안드로이드 애플리케이션 취약점 분석 및 악성코드 분석에 주로 사용됨
우측 상단의 시스템 설정
성능 > 해상도 설정: (기본) 1600x900 설정되어 있음, (변경) 960x540
성능 > 그래픽 모드: (기본) 호환+모드, (변경) 기본모드(DirectX)
일반 > 시작항목: ROOT켜기 체크 (안드로이드 실제 단말기에서 루팅한 것과 동일한 환경을 만들어주는 것)
인터페이스 > 선택적으로 설정
모든 설치가 완료되면 Nox ADB를 환경변수 설정함
ADB(Android Debug Bridge): 안드로이드를 위한 디버깅 툴, 안드로이드 애뮬레이터와 통신 가능
설정 위치: C:\Program Files (x86)\Nox\bin\nox_adb.exe
윈도우 '시스템 환경 변수 편집' 내 시스템 속성 - 고급 - 환경 변수 > 시스템 변수(Path) 설정 클릭 후 편집
> 새로 만들기(N) 후 위의 설정 위치(bin 까지) 추가 후 설정
명령 프롬프트(cmd)에서 nox_adb 입력 시 해당 정보 출력되는 정보 확인(환경변수 설정이 잘 이루어짐)
연결된 nox_adb 쉘 접속
-s <specific device> - directs command to the device or emulator with the given serial number or qualifier. Overrides ANDROID_SERIAL environment variable.