시큐리티 용어
xss
YouTube
-
[콘텐츠 보안 정책 Web Google Developers](https://developers.google.com/web/fundamentals/security/csp?hl=ko) => xss에 대비하기 위한 contents security policy(cors만으로는 안되는 경우?) - Exploit : 소프트웨어 혹은 시스템으 ㅣ비정상 동작./상황을 유도하는 데이터, 코드, 패킷, 이
벤트를 의미=> 취약점을 찾아서 익스플로잇을 실행되도록 한다 - Payload : 소프트웨어/시스템이 익스플로잇에 의해 공격된 후 임의로 실행되는 머신코드/명령어를 의미
- Shellcode : 페이로드으 ㅣ한 유형이며, 쉘 프로그램을 실행시키는 머신코드/명령어를 의미합니다. 유형 - Execute, Remote Shell(Reverse, Bind), Downlaod&Execute,…)
(샾떨어진다 -> 루트 취득? 일반유저는 $ 루트 ) - Injection Vector : 익스플로잇 관련 데이터 + shellcode를주입시킬수 있는 지점
(html, css로만 된 웹사이트같은거는 인젝션벡터가 없어서 침투할지점도 없다)
“취약점 분석가는 퍼징을 통해 인젝션 벡터를 찾았다.”
“취약한 소프트웨어가 익스플로잇에 의해 비정상적으로 동작하여 쉘코드를 실행했다”
- 실행파일의 라이프사이클과 가상메모리 메커니즘
소스코드 => obj file(단순 번역된 파일 - 적재될 메모리주소imagebase, 가장먼저 실행할 코드위치entrypoint, 라이브러리 링킹정보) => 링커 => 실행파일(헤더에 앞에 없는 정보)
실행파일 포맷
윈도우 PE(Portable executable)
리눅스 ELF(Executable Linkalbe Format)
Mac => Mach-O
실행코드 구조(순서대로)
- 헤더(이미지베이스, 엔트리포인트 포함)
- 코드
- 데이터(여기서부터 실행파일 열었을때 식별가능)
- import영역(라이브러리 정보, 사람이 열어서 식별가능)
샌드박스
격리시켜서 외부로 영향이 나가지 않도록 그안에서 놀도록 하는거
=> web storage도 샌드박스다. 외부 파일시스템쓰지말고 브라우저내에서는 이 공간 쓰도록해서 격리하도록
was는 루트로 실행해서는 안된다. 자식 프로세스는 부모프로세스의 권한을 넘지 못하는데, php같은 파일을 실행시킬때 tomcat같은 와스에서 포크하므로, 탐캣을 루트로 실행하면 그 안의 웹앱도 루트까지 권한을 가질 수 있다. 웹에서 동작하는 쉘을 만들어서 이것저걸 루트권한으로 터미널을 쓸 수있음
시큐어 코드립뷰
- 버퍼를 할당하고 데이터를 주입하는 코드가 존재하는지 확인한다 (배열변수, 엠얼록)
- 1이 존재한다면 해당 영역에 외부의 입력값이 주입될 수 있는지 확인한다
- 주입되는 데이터에 대한 사이즈값 검사를 하는지 확인한다. (버퍼오버플로우 취약점 가능성)
./bof0 $(python -c ‘print “A”*200’)
용어라도 잘알아두면 도움이 될거같다.
교재에 유형 열개 잘정리하고 네이버블로그에 보안이랑 합쳐서 만들자.
버퍼(스택)을 안전하게 사용하기 위한 대응 방법
- 시큐어 코딩
- 버퍼의 사이즈 한계값을 명확히 지정하고, 유입되는 사이즈가 버퍼의 한계값을 넘어서는지 여부를 검사한다.
- 안전한 함수를 사용한 (strncpy류)다
- 시스템 하드닝 + 보안 컴파일 => StackCookie, DEP(Data Execution Prevention - 스택영역은 실행할 필요가 없으니 권한을 안주겠다), ASLR(Address Space Layout Randomization => 프로그램올릴때 주소시작번지를 랜덤하게(끼워넣을 악성코드의 주소 알기 어려움)) => (OS가제공해주는 디펜스 매커닌즘. 그냥 가따쓰면된다고함)
보안이란 자산을 지키는건데 네트워크에서 자산이라함은 데이터
https://youtu.be/_0p72JJ9iM8
스니핑(sniffing) 인증되지 않은 사람이 볼 수 있다(중간에 가로채기) => 기밀성
스푸핑(spoofing) 정보가 변경되어서 전달된다(변조된 데이터 전달하기) => 무결성
DoS(Denial of Service) 사용자가 필요할 때 정보를 받을 수 없다(디도스같은거) => 가용성
위 세가지가 보안의 3대요소이기도 하다
이것들을 막기위해 네트워크 레이어마다 방안이 있는데
internet layer에서는 IPSec이라는 방식 사용
ESP(Encapsulation Security Protocol)을. 이용해서
ESP 헤더, 트레일러, auth 정보등을 패킷에 끼워넣는다
(그림첨부)
transport layer
tls방식(공개키, 대칭키) => 생활코딩
application layer => https
기업등에서는 vpn을 구성해 내부 네트워크로 구성해서 방어하기도 함
유튜브 중 그림 참고