728x90

예전에 opencv를 빌드할떄

 

cmake에서 병렬프로그래밍 처리를 할건지 물어보는 옵션이 있었다.

 

 

당시에는 openmp도 있고, cuda도 있으니까

 

 

둘다 하는게 좋지 않을까?

 

생각 들기도 했고 뭐가 뭔지 잘몰라

 

그냥 구글링에서 시키는데로 cuda만 추가하곤 했었다.

 

 

 

오늘 openmp를 공부하면서

 

이전에 있던 일이 생각나 openmp와 opencv에 대한 글을 찾았다.

 

 

OpenCV와 병렬 프로그래밍 (TBB, 꼭 설치해야 하나?)

https://kkokkal.tistory.com/1301

 

이 글에서 결론은 cuda가 훨씬 빠르니

 

cuda를 쓸수 있는 경우 병렬프로그래밍 처리를 할 필요가 없다고 한다.

 

 

다르게 말하면 cuda를 못쓰는 인텔 그래픽이나 amd만 있는 경우 병렬 프로그래밍을 추가하면 좋을듯 하다

 

하지만 cuda만큼 성능향상은없겠지만

300x250

'컴퓨터과학 > 기타' 카테고리의 다른 글

openmp - 6. openmp 예제  (0) 2020.07.29
openmp - 5. OpenMP 시작하기  (0) 2020.07.29
openmp - 4. 잡 스캐줄러  (0) 2020.07.29
openmp - 2. 컴파일 시작하기  (0) 2020.07.29
openmp - 1. 개요  (0) 2020.07.29
728x90

gcc와 openmp

- 대부분의 컴파일러에는 openmp가 지원됨

-> 컴파일러만 있으면 된다.

 

 

순차 프로그램 컴파일 표기

program vendor compiler expension
C/C++ intel icc/icpc .C, .cc, .cpp, .cxx,
GNU gcc/g++
Cray cc/CC
F77/F90 intel ifort .f, .for, .fpp
GNU gfortran
Cray ftn

 

컴파일 예시

$ {gcc | gfortran} -o test.exe [-03] [-march=knl] test.{c|f90}

$ {icc|ifort} -o test.exe [-03] [-march=knl] test.{c|90}

 

openmp 컴파일

$ {gcc | gfortran} -o test.exe -fopenmp [-03] [-march=knl] test.{c|f90}

$ {icc|ifort} -o test.exe -fopenmp [-03] [-march=knl] test.{c|90}

 

 

간단한 openmp 프로그래밍

- #pragma omp parallel 과 { }부분은 openmp 병렬 영역이라고 한다.

 

 

gcc로 openmp c코드 빌드 및 실행 결과

- -fopenmp 옵션을 준 경우 병렬로 처리해서인지 코어갯수만큼 hello world가 여러개가 뜬다

* openmp의 장점 : -fopenmp 옵션을 주고 뺴고의 차이에 따라 직렬, 병렬 프로그램으로 설정할 수있음

 

 

* .vimrc 파일 내용

- 출처 : https://blog.outsider.ne.kr/518

set nu
syntax on
set mouse=a
set nocompatible " 오리지날 VI와 호환하지 않음
set autoindent " 자동 들여쓰기
set cindent " C 프로그래밍용 자동 들여쓰기
set smartindent " 스마트한 들여쓰기 set wrap
set nowrapscan " 검색할 때 문서의 끝에서 처음으로 안돌아감
set nobackup " 백업 파일을 안만듬
set visualbell " 키를 잘못눌렀을 때 화면 프레시
set ruler " 화면 우측 하단에 현재 커서의 위치(줄,칸) 표시
set shiftwidth=4 " 자동 들여쓰기 4칸
set number " 행번호 표시, set nu 도 가능
set fencs=ucs-bom,utf-8,euc-kr.latin1 " 한글 파일은 euc-kr로, 유니코드는 유니코드로
set fileencoding=utf-8 " 파일저장인코딩
set tenc=utf-8 " 터미널 인코딩
set expandtab " 탭대신 스페이스
set hlsearch " 검색어 강조, set hls 도 가능
set ignorecase " 검색시 대소문자 무시, set ic 도 가능
set tabstop=4 " 탭을 4칸으로
set lbr
set incsearch " 키워드 입력시 점진적 검색
syntax on " 구문강조 사용
filetype indent on "파일 종류에 따른 구문강조
set background=dark " 하이라이팅 lihgt / dark
colorscheme desert " vi 색상 테마 설정
set backspace=eol,start,indent " 줄의 끝, 시작, 들여쓰기에서 백스페이스시 이전줄로
set history=1000 " vi 편집기록 기억갯수 .vim`info에 기록

 

300x250

'컴퓨터과학 > 기타' 카테고리의 다른 글

openmp - 6. openmp 예제  (0) 2020.07.29
openmp - 5. OpenMP 시작하기  (0) 2020.07.29
openmp - 4. 잡 스캐줄러  (0) 2020.07.29
openmp - 3. openmp와 opencv  (0) 2020.07.29
openmp - 1. 개요  (0) 2020.07.29
728x90

병렬 프로그래밍

- cpu를 병렬로 사용하여 성능을 개선시켜주는 프로그래밍 방법

- openmp와 mpi 가 있음

 

openmp

- 스레드 기반 병렬 프로그래밍

- 단일 컴퓨터 병렬

 

mpi

- 프로세스 기반 병렬 프로그래밍

- 여러 컴퓨터 병렬

 

 

 

실습

- 누리온 5호기 슈퍼컴퓨터 사용

- 하나의 cpu만 쓰면 일반 컴퓨터만 사용하는것과 다를것 없음

- 하나의 코어를 쓰기보다 64개 코어를 동시에 쓰는게 더 효율적임

=> 대표적인 방법이 openmp와 mpi

* 하나의 컴퓨터만 사용하는 경우 병렬화 openmp

 

 

 

병렬 프로그래밍에서의 시간

- 하나의 프로세스를 사용하는 시리얼 (순차) 프로그램 . 내가 독점하는 시간

   => 월클락타임 = cpu타임이 동일

- 여러사람이 나눠 사용하는 경우 os가 여러 사람의 요청을 들어주기 위해 시분할 수행

   => 월클락타임 * 1/(사용자 수) =cpu시간

* cpu 시간 : 내가 cpu를 점유한 시간

 

 

병렬 프로그래밍을 통한 소요시간의 차이

- 1개의 코어를 사용할때 1시간 소요

- 2개의 코어를 썻더니 30분 소요 => 2개의 cpu 타임은 동일

=> cpu 타임과 월클럭 타임은 다르다

 

 

 

 

 

300x250

'컴퓨터과학 > 기타' 카테고리의 다른 글

openmp - 6. openmp 예제  (0) 2020.07.29
openmp - 5. OpenMP 시작하기  (0) 2020.07.29
openmp - 4. 잡 스캐줄러  (0) 2020.07.29
openmp - 3. openmp와 opencv  (0) 2020.07.29
openmp - 2. 컴파일 시작하기  (0) 2020.07.29
728x90

os만들기 - 2에서 한 모든 일들은 다 쓸모없는 짓이었다.

 

 

 

나중에 다시보니

 

지금 하는 바이너리 파일 만드는건

 

모든 바이너리 코드들을 내 마음대로가 아니라 똑같이 만들어야 부팅가능한 이미지가 만들어지더라

 

왜 계속 아무리 돌려봐도 실행이 안되나 싶었더니

 

부팅 가능한 기계어 코드를 만드는 예제 인데

 

정해진 대로 안한 채 내가 마음대로 치고

 

부팅 가능한 이미지를 만들겠다고 이것 저것 툴만 만지고 있었다.

 

 

 

 

아무튼 정해진 주소에 코드를 올바르게 입력했더니

 

무슨 뜻인지 모를 이진 코드 이미지가 일단 부팅은 가능한 상태가 되었다.

 

 

 

 

 

 

여기서 바이너리에디터로 조금만 수정하면

 

hello world가 출력된다.

 

 

 

오늘 한 내용은

 

기계어 수준으로

 

부팅 가능한 플로피 이미지를 만들고 hello, world를 출력하는 프로그램을 작성하였다.

 

 

하지만 기계어로 제어하는 만큼 한자리라도 잘못되면 원하는 결과가 안나올수 있다.

 

오늘 처럼 원인을 잘못 생각해서 삽질하는일 없도록 조심하자 ㅠㅠ

 

아래의 파일은 위 바이너리 이미지 파일

 

helloos.img
1.41MB

 

 

 

 

 

bochs에서도 잘돌아간다!

300x250
728x90

자료에서보면

 

boshs에 방금 만든 이미지를 돌리더라

 

바로 돌릴수 있는줄 알고 해봤지만

 

- 부팅가능한 이미지가 아니라고 아무것도 뜨지 않는다.

 

 

 

 

다시 잘보니 toolset으로 부팅 가능 이미지로 만들어야 된다고 한다.

 

toolset이 원래 CD에 있다고는 하는데 나는 CD가없으므로

 

소스 찾다보니 깃헙에 올라온걸 찾았다.

 

https://github.com/HariboteOS/tolsrc

 

일단 윈도우 바이너리로 빌드하긴 해야되니

 

mingw부터 깔고, 환경변수 등록하고

 

 

 

toolset 빌드 중

 

하다가 에러발생

 

gmtime_r 이 인클루드 안된것 같다.

 

 

 

찾아보니 ctime.h는 g++에 있는듯 하다

 

 

g++도 설치

 

 

 

으악 보다보니

 

 

c++이 아니라

 

내가 사용한 gcc랑 c언어 표준 이랑 맞지 않았던것 같다.

 

 

C Standards. C표준. C11, C99, C90, 등. 그리고 gcc

https://junho85.pe.kr/1026

 

 

 

 

C2X는 C18 다음 표준안인듯 하다.

 

 

 

 

일단 메이크 파일에서

 

-std=gnu2x를 추가해주고 다시 빌드를 해봤다.

 

 

 

 

 

아까 처럼 워닝은 안뜨지만

 

gmtime_r이 없으니 링킹이 안되는건 여전하다.

 

gcc 버전을 바꿔야 될수도 있겠다...

 

 

 

 

 

 

다시 검색하다보니

 

gmtime_r은 gmtime의 안전한 버전으로 susv2에 있다고 한다.

 

gcc에 susv2만 추가할 수 있으면 될것같긴한데 ...

 

 

 

일단 sus는 단일 유닉스 규격 single unix specification

 

 

 

 

도저히 안되서 msys에서 작업하려는데

 

gcc도 못찾고 있더라

 

누가 pacman -S gcc를 치면 된다길래 했더니

 

gcc가 설치된다 ..

 

 

 

 

찾아보니 pacman이 msys에서 패키지 관리 프로그램이라고 한다.

 

 

https://myshare.tistory.com/14

 

 

pacman으로 gcc 설치후 make 해보니

 

빌드 성공 ..

 

지금까지 뭘한걸가 ㅠㅜㅜㅜ

 

 

make install로 바이너리 정리해주고

 

 

윈도우 실행파일로 빌드 완료 ㅎㅎ

 

 

 

 

추가적인 유용한 도구들 설치

- 아직은 gcc만 설치되어있으므로

 

http://blog.tcltk.co.kr/?p=4002

 

 

imgtol을 써야되는데

 

자꾸 cpp0가 없다고 빌드가 안된다.

 

 

 

 

pacman -S mingw-w64-x86_64-yaml-cpp0.3 설치

 

 

 

그래도 안된다..

 

 

 

 

 

 

 

 

 

 

계속 해매다가

 

어느 중국인이 tolset을 깃헙에 올린걸 찾았다..

 

https://github.com/fakefish/OSASK

 

 

결국에는 이짓을 할 필요가 없었어..

 

 

 

 

다시 해서

 

run.bat 파일이랑 아까 만든 이미지 파일을 놓고

 

 

 

 

run.bat을 돌리면

 

qemu가 돌아가는데 부팅불가능한 이미지라고 뜬다.

 

 

 

install.bat도 만들어서 돌려보면...

 

16비트라고 안돌아간다 OTL

 

 

 

 

아까 구한 imgtol 소스에서

 

빌드해야될것 같다..

 

그런데 아까 cpp0가 없다고 빌드가 안됬었는데 

 

 

 

 

 

z_tools에 있던 cpp0를 가져와 써보자..

 

 

 

여전히 cpp0를 못찾는다고 하니

 

일단 cpp0.exe로 고쳐주자

 

./cpp0.exe -v 로 찍어보니

 

엄청 오래된듯 하다

 

메이크 파일을 고치고

 

 

빌드했더니

 

cpp0는 잘 넘어갔는데 이번에는 aska가 문제다..

 

 

 

메이크 파일에서 필요하단건 다 복붙하자

 

그런데 bim2bin3이 안보인다..

 

 

 

일단 찾은것 대로만 메이크파일 고쳐주고 다시 실행해보면..

 

 

역시 잘되다가 bim2bin3이 문제다

 

아쉬운 대로 ztools에 bim2bin.exe로 바꿔서 한번 돌려보면

 

 

역시나 안된다.

 

 

 

실행 파일명만 바꾸고 옵션을 그대로 둔 상태에서 빌드해봤더니

 

성공

드디여 삽질해서

 

imgtol.com를 만들었다.

 

 

실행했더니 포맷 에러 발생

 

 

 

생각해보니 빌드 문제가 아니라 도스 명령을 64비트 운영체제에서 돌리려한게 문제였다.

 

 

검색해보니 기능 추가하면 돌릴수 있다고 하내

 

 

https://www.groovypost.com/howto/enable-16-bit-application-support-windows-10/

근데 난 없음

 

 

 

어쩔수 없이 도스박스에서 돌려보자

 

 

반가운 도스박스

 

 

 

 

 

일단 돌아가기는 하지만

 

없는 install.bat에 없는 a드라이브에다가 이미지를 쓴다고 했으니

 

드라이버 에러가 난다

 

 

 

아까 imtol 폴더에 readme를 봐야할것같은데

 

한글 윈도우라 다깨진다.

 

일단 볼수 있는 부분으로 이해해보면

 

imgtol.com w a: helloos.img는

 

a: 드라이브로 이미지를 올린다고 볼수 있을것같다

 

 

삽질한 결과 문제는 이게아니었다..

300x250
728x90

 

우선 C언어, 어셈블러가 아닌

바이너리 에디터로 시작

 

바이너리 에디터

- 2진수 편집기로 바이너리 실행파일을 수정할수 있음.

- 사용할 프로그램은 bz162

 

 

Bz162.zip
0.05MB

 

 

 

 

BZ162 바이너리 에디터 화면

- 좌측 000000은 메모리 주소

- 중간의 0 ~ F는 000000, 000001, 000002, ..., 00000F 번지에 각각 32비트 값저장

- 우측의 01234..EF는 ASCII코드상 표현

 

 

바이너리 에디터에 입력 예시

- 다음과 같이 문자열들을 입력할때 해당 문자의 아스키코드 16진수 값이 중앙의 번지에 저장되는 모습을 볼 수 있음.

* 문자 'h'는 10진수로 104 -> 16진수로 0x68로 바이너리 에디터의 000000번지에 올바르게 값이 저장됨.

 

 

- 아래는 아스키 코드 테이블 

아스키코드 테이블

 

 

 

hello.img로 저장

300x250
728x90

컴퓨터 구조의 필요성

-OS, 어플리케이션 등을 알기 위해서 컴퓨터의 구조와 동작 과정에 대해 먼저 학습이 필요함.

- 특히 키 로거를 구현하기 위해서 입출력 장치에 대해서 이해 필요

 

 

컴퓨터 구조

- CPU : 명령어를 해석하여 제어 신호를 주변 장치에 전달

- 메모리 : 데이터 저장

- 주변 장치 : 입력 장치로 키보드와 마우스, 출력 장치로 모니터와 프린터, 기능 확장을 위한 네트워크/그래픽카드

- 버스 : CPU가 메모리, 주변장치 간 데이터 전송을 위한 통로

 

 

CPU

- ALU Arithmetic Lo : 산술 논리연산 수행

- CU Control Unit : 기억장치로부터 받은 명령어를 해석하여 제어 신호를 보내는 유닛

- 레지스터 : 고속 데이터 저장 장소. 해킹시 레지스터 값 변화를 주시해야함 

- 버스 인터페이스

 

 

메모리

- 프로세서가 수행되는 공간으로 메모리 상의 값을 조작 함

- 논리적 메모리 구조 : 힙, 스택, 코드, 데이터

- ROM, RAM이 존재 

 

 

 

운영체제

- SW, HW를 제어하는 프로그램

- 개발자는 OS가 제공하는 API만 알면 됨

- SW 기능 : 프로세스 생성, 소멸, 동기화, 스케출링 수행, 파일 시스템 관리

- HW 기능 : 주변장치와 CPU, 센서 관리

 

 

프로세스

- OS의 제어를 받는 프로그램의 실행 단위 -> PCB Process Control Block으로 표현

 * PCB 자료구조 구성 : PID, Process Status, Counter, Register, 스케줄링 정보 등

- API 후킹, DLL 인잭션을 하기 위해서 프로세스 동작 이해 필요

 

 

프로세스와 메모리, 해킹

- 프로세스는 데이터를 메모리에 적재하여 수행.

- 메모리에 적재되는 데이터 종류 : 주소, 변수, 객체, 반환값

- 해킹과 메모리 : 소스 코드 인젝션, 버퍼 오버플로우 등은 메모리의 데이터를 변경하여 수행

 

 

논리적인 메모리 구조

- 코드 영역 : 실행 파일들을 이루는 명령어들이 적재되는 공간 -> 함수, 제어문, 상수 등

- 데이터 영역 : 전역 변수, 정적 변수, 구조체 등 적재

- 힙 영역 : 프로세스가 임의로 할당하는 공간(동적 할당). ex) malloc 사용하는 경우

- 스택 영역 : 지역 변수, 함수 호출 정보 저장 공간

 

 

 

네트워크 관련 용어

- 식별자 : 컴퓨터를 구분하기 위한 수단으로 MAC, IP

- 프로토콜 : 데이터를 전송하기 위한 규칙으로 주소, 포트번호 등 정보의 모음을 하나의 프로토콜이라 할 수 있음.

- 라우팅 : 데이터를 빠르게 전송할수 있는 경로를 찾는 기능

 

 

 

OSI 7계층

- Open System Interconnection

- 서로 다른 장치/시스템간에 통신을 수행할수 있도록 하는 표준 모델

- 상위에서 하위 층으로 내려갈때 헤더와 테일이 추가됨

7. 응용계층 : 프로그램에 서비스, API 제공(ex. FTP)

6. 표현 계층 : 데이터 표현 방식을 규정(ex. JPEG, ASCII, UTF-8)

5. 세션 계층 : 데이터를 전송하기 위한 프로세스간 가상의 통신 경로

4. 전송 계층 : 시스템간 연결이 확립되면 데이터를 전송하기 위한 정의(ex. TCP, UDP) 

3. 네트워크 계층 : 서로 다른 시스템이 통신하기 위한 최적의 경로 선정(ex. 라우터, IP, ICMP)

2. 데이터 링크 계층 : 논리적인 연결 정의 (ex. 이더넷, HDLC)

1. 물리 계층 : 물리적인 연결을 정의(ex. 리피터, 허브)

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 2. 해킹 종류  (1) 2020.07.28
해킹 - 1. 해킹 개요  (0) 2020.07.28
Iot 보안  (0) 2020.07.25
728x90

해킹의 종류

- 네트워크 해킹 : 패킷 훔쳐보기나 DOS 공격

- 어플리케이션 해킹 : 악의적 라이브러리 주입

- 웹 해킹 : 웹의 취약점 악용

- 시스템 해킹 : 커널 영역에서 데이터나 루트 권한 취득

 

 

웹해킹

- 가장 흔한 해킹 분야

- 웹의 구성 요소 : 브라우저, 웹서버, DB

- XSS Cross-Site Scripting : 게시글에 악의적 스크립트 삽입하여 정보 추출

- 피싱 phishing : 비슷한 웹사이트를 만들어 정보 취득

- CSRF Cross Site Request Forgery : XSS와 동일하게 악의적 스크립트 삽입. 웹서버 공격

- 파밍 Pharming : DNS를 해킹하여 위장 사이트를 보내는 기술

- SQL 인젝션 : 로그인시 입력 박스의 데이터는 SQL로 조회. 이를 악용.

- 웹 셸 : 파일 업로드를 악용하여 악의적인 파일을 업로드.

 

 

 

 

시스템 해킹

- 컴퓨터 시스템에 들어가 데이터나 권한 등을 탈취하는 행위

- 컴퓨터 시스템의 구성 요소 : HW, OS, 프로세스 -> 서로 인터페이스를 통해 정보를 주고받음. 그 사이를 침투

- 백도어 : 해커가 타인의 PC를 제어하도록하는 프로그램

- 레지스트리 공격 : 레지스트리를 조작하여 비밀번호 초기화, 방화벽 변경 등 공격 수행

- 버퍼 오버플로 buffer overflow : 잘못된 데이터를 입력하여 메모리에 해커가 원하는 데이터를 넣고 실행하는 공격.

- 루트킷 : 루트 권한 획득, 백도어, 위장 등 기능을 가진 프로그램

 

 

 

 

네트워크 해킹

- TCP/IP 프로토콜의 취약점을 악용하는 행위

- 포트 스캐닝 : 서버나 컴퓨터가 열린 포트를 찾는 방법

- 세션 하이재킹 : 세션에 존재하는 정보를 탈취하는 행위

- DoS Denial of Service : 대량의 패킷을 전송하여 서비스 거부를 일으켜 동작 못하게 만드는 기술

- 패킷 스니핑 : 동일한 네트워크에 이동하는 패킷을 훔쳐보기

- 스푸핑 spoofing : PC의 ARP 캐시 테이블을 조작하여 해커에게 정보를 전달하게 만드는 행위

 

 

 

 

어플리케이션 해킹

- 프로그래밍 언어로 만든 SW의 취약점에 접근하여 악용하는 행위

- 메시지 후킹 : 키로거의 경우 키보드 입력 메시지를 가로챔

- DLL 인젝션 : 악의적인 DLL을 어플리케이션에 삽입

- 코드 인젝션 : DLL 대신 악의적인 쉘 코드 삽입

- API 후킹 : 디버깅 프로세스에서 악의적인 코드 삽입

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 1. 해킹 개요  (0) 2020.07.28
Iot 보안  (0) 2020.07.25
네트워크 - 9 전송 계층 프로토콜  (0) 2020.05.18
728x90

해커와 크래커

- 해킹 : 네트워크와 컴퓨터 내부를 돌아다니는 행위

- 크래커 : 악의적인 해킹을 하는 해커

- 화이트 해커 : 크래커로부터 시스템을 보호하는 해커

 

 

해커의 일

- 취약점 점검 : 포트 스캐닝 등 다양한 기법으로 SW, Network, HW 취약점 점검

- 포렌식 : 범죄 증거 찾는 일

- 보안 관제 : 대규모 시스템 관리

- 침투 테스트 : 보호 되어야 하는 네트워크로 접근 가능한지 확인하는 행위

 

 

해킹의 종류

- 네트워크 해킹 : 열린 포트를 찾거나 패킷을 수집 분석(스니핑), 서버로 위장하여 공격(스푸핑)

- 어플리케이션 해킹 : 임의의 라이브러리나 소스 삽입, 키보드 입력 가로채기

- 웹 해킹 : 웹 크롤러, 입력 박스에 오류코드 주입(SQL 인젝션), HTTP 패킷 수정하여 악의적 파일 업로드

- 시스템 해킹 : 해커가 PC를 제어가능한 백도어 작성, 레지스트리 검색 및 수정 등

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 2. 해킹 종류  (1) 2020.07.28
Iot 보안  (0) 2020.07.25
네트워크 - 9 전송 계층 프로토콜  (0) 2020.05.18
네트워크 - 8 라우팅 프로토콜 2  (0) 2020.05.18
728x90

1. 하드웨어

1.1 개발 보드 development board, evaluation kit(board)

- ATmega

- Arduino

- micro bit

- STM series

 

1.2 라즈베리 파이

- 5V micro usb로 전원, 2.5mA 전류

- GPIO 50mA 전류, HDMI 50mA 전류, 250mA 전류 소비

 

1.3 GPIO

- General Perpose Input/Oupu, GPIO

- 사용자 제어 가능한 디지털 신호 핀

 

1.4 센서

- GPIO 핀으로 센서를 연결하여 사용 가능

- 온습도, 동작, 무선, 적웨선, 블루투스, 모터 센서 등

 

 

 

 

 

 

 

2. IOT 취약점

2.1 HW

- 계정 취약점

- 취약한 API키

- 히스토리

- 로그

 

2.2 통신

- 보호되지 않는 통신

- 입력값 조작

- SSL 통신 취약점

 

2.3 센서

- 보호되지 않는 통신

- 입력값 조작

 

2.4 모바일

- APK 디컴파일

- 관리자 웹페이지

- 중요정보 노출

 

 

 

 

 

 

 

 

 

 

3. 펌웨어

3.1 펌웨어

- ROM에 저장된 하드웨어 제어 프로그램

 -> 하드웨어 초기화 목적

- 제어 회로를 하드웨어로만 만들기 힘듦으로 펌웨어 활용

 

 

3.2 펌웨어 구성

- 부트로더 : 부팅에 필요한 프로그램

- 커널 : 운영체제 커널

- 파일 시스템 : 펌웨어 소스 있는 공간

- 기타 : 데이터 저장 공간 등 기타 영역

 

3.3 펌웨어 쓰기

- 롬라이터로 ROM에 펌웨어 쓰기

- JTAG Joint Test Action Group

  : 펌웨어 업로드 및 디버깅 시 사용. 

  인터페이스 - TDI 데이터 입력, TDO 데이터 출력, TCK 클럭, TMS 모드, TRST 리셋

 

- UART Universial asynchronous receiver/transmitter

  : 병렬 데이터를 직렬로 변환하여 비동기 통신 수행하는 하드웨어. 

   RS-232, RS-422 통신 표준 방식과 같이 활용됨. 

   인터페이스 구성 - Tx Transmit, Rx Receive, GND Ground, Vcc Voltage 

 

 

 

 

 

 

 

4. 분석 도구

- AttifyOS : 취약점 진단 도구들이 있는 운영체제

- Binwalk :펌웨어 바이너리 이미지에서 데이터, 파일 추출하여 분석하는 도구

- FMK Firmware Mod kit : 펌웨어 이미지 추출 및 리빌드 도구

- Nmap : 포트, 서비스, 취약점 스캐닝 및 점검 수행 도구

- Armitage : GUI 환경 취약점 진단 툴

- webgoat : 웹 해킹 연습 환경

- Yasca : 정적 코드 분석 도구로 보안 취약점, 코드 품질 등을 분석

 

 

 

 

 

 

 

 

 

5. 통신과 프로토콜

5.1 IoT 취약점

- Iot 시스템에서 장치와 게이트웨이 간 통신에서 RF, Zigbee, Wifi, 블루투스 등 이용

 -> 취약한 RF나 암호화 하지 않을 시 스니핑 가능

 

5.2 SDR software defined radio

- 소프트웨어로 하드웨어 설계하여 신호 송수신

 -> RF 신호 도청, 재전송, 재밍 등

- ex : Hack RF

 

5.3 MQTT Message Quee Telemetry Transport

- 경량화 Iot 프로토콜로 메세지 송수신 수행(스택 : MQTT < TCP< IP)

- 사용 예시 : RFID, POS, 교통 모니터링 등

- 장점 : 큰 오버헤드 없이 대량 데이터 전송, 최소한 패킷 사용

- 최약점 : 암호화 하지 않은 경우 내용 노출 및 변조 공격에 취약

 

5.4 Wifi

- 패킷 암호화와 인증 필요

- 무선 전송 구간만 암호화 한 경우 : Wifi 네트워크를 공격 가능

- 암호화 하지 않은 경우 : 신호를 재전송 하거나 변조, 내용 확인 등 가능

- Aircrak-ng : WEP와 WPA/WPA2 크랙 및 분석 도구가 통합된 네트워크 SW

 

5.5 Zigbee 지그비 통신

- 단순 프로토콜 스택 구성. 낮은 데이터 전송 속도 긴 베터리 수명 요구시 사용

300x250

+ Recent posts