1. 보안 취약성 식별
1. 보안 취약성(Vulnerability)의 개념
- 정보 시스템에 불법적인 사용자의 접근을 허용할 수 있는 위협이다.
- 정보 시스템의 정상적인 서비스를 방해하는 위협이다.
- 정보시스템에서 관리하는 중요 데이터의 유출, 변조, 삭제에 대한 위협이다.
2. 침투 테스트
- 응용 프로그램의 보안 취약점, 위협 요소, 허점을 탐지하는 데 도움을 준다.
- 위험한 코드 삽입, SQL 삽입, 매개변수화, 권한 없는 입력 등의 공격을 수행하여 안전하지 않은 비즈니스 로직과 악용 가능성이 있는 부적절한 보안 조치를 식별하고 평가한다.
[침투 테스트의 절차]
- 정찰 : 목표 애플리케이션에 관련된 정보를 수집
- 탐색 : 애플리케이션을 검사하여 보안 위협에 관련된 상세 정보를 확인
- 접근 권한 취득 : 애플리케이션의 허점을 찾아내어 악성 코드를 삽입하여 데이터에 접근할 수 있는 권한을 획득한 후 이를 이용한 공격을 수행
- 액새스 유지 : 애플리케이션 내에 접근 권한을 계속 유지하여 다수의 공격테스트 수행
- 추적 방지 : 공격자는 자신의 흔적을 남기지 않도록 로그, 수집된 데이터 등의 접근 이력을 모두 제거
3. 취약성 공격(Exploit Attack)
- 보안 버그나 잘못된 설정 등 결함을 공격하여 공격자가 원하는 결과를 얻기 위한 코드, 프로그램, 스크립트 또는 이를 이용하는 행위를 의미
- 취약성 공격의 목표는 대상 시스템을 장악하여 정보를 빼내거나 혹은 다른 용도로 악용하기 위함이다.
- 기존 취약점 공격과는 달리 피해 시스템의 중요 데이터를 암호화하여 인질로 삼고 금전을 요구하는 랜섬웨어(Ransomware)도 취약점 공격을 통해 권한을 획득하고 있다.
4. 취약성에 따른 공격 기법
- 취약성에 따른 공격기법은 DoS, 오버플로우, 권한상승, SQL 인젝션, XSS등이 있다.
- 서비스 거부(DoS): 무의미한 서비스 요청 등의 반복을 통해 특정 시스템의 가용자원을 소모시켜 서비스 가용성을 저하시키는 공격기법
- 코드 실행: 응용 프로그램이 적절한 입력 유효성 검사 없이 쉘(Shell) 명령을 실행하는 취약점을 이용하여 공격자가 원하는 임의 코드가 실행되도록 하는 공격 기법
- 버퍼 오버플로우 : 정해진 메모리의 범위를 넘치게 해서 원래의 리턴 주소를 번경시켜 임의의 프로그램이나 함수를 실행시키는 시스템 해킹 기법
- 정보 수집 : 공격 전 서버 또는 시스템의 취약점, 네트워크 경로, 방화벽 설치 유무를 알아내고 정보를 수집하는 공격 기법
cf : 방화벽(Firewall) : 미리 정의된 보안 규칙을 기반으로 외부로부터 불법 침입과 내부의 불법 정보 유출을 방지하고, 내/외부 네트워크의 상호 간 영향을 차단하기 위한 보안 시스템ㅁ이다.
- 권한 상승: 악성 프로그램 설치 후 데이터 조회 변경, 삭제 등을 통한 권한 상승으로 루트권한을 획득하는 공격기법
- SQL 인젝션: 데이터베이스와 연동된 웹 애플리케이션에서 공격자가 입력 폼 및 URL 입력란에 SQL문을 삽입하여 DB로부터 정보를 열람할 수 있는 공격 기법
- 크로스 사이트 스크립팅(XSS) : 공격자가 게시판에 악성 스크립트를 작성, 삽입하여 사용자가 그것을 보았을 때 이벤트 발생을 통해 사용자의 쿠키정보, 개인 정보 등을 특정사이트로 전송하는 공격기법
- 사이트 간 요청 위조 공격(CSRF) : 웹 사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격기법
- 디렉터리 접근: HTTP 기반의 공격으로 액세스가 제한된 디렉터리에 접근하여, 서버의 루트 디렉터리 에서 외부 명령을 실행하여 파일, 웹소스 등을 강제로 내려 받을 수 있는 공격기법
5. 시큐어 코딩(Secure Coding)
- 소프트웨어 개발 과정에서 개발자의 실수, 논리적 오류 등으로 인해SW에 내포될 수 있는 보안 취약점을 최소화하고, 안전한 소프트웨어를 개발하기 위한 일련의 활동
2. API
1. API(Application Programming Interface)의 개념
- 애플리케이션을 만둘기 위한 하위 함수, 프로토콜, 도구들의 집합을 말한다.
- 명확하게 정의된 다양한 컴포넌트 간의 통신 방법
2. API의 유형
1. 오픈API(Open API) : 누구나 쉽게 접근하여 정보를 공유하기 위해 만들어진 API ex 기상청 API
2. 비공개API(Close API): 권한이 있는 일부 사용자들에게만 정보를 제공하기 위해 만들어진 API(ex:사내 API)
3. API의 목적
- API를 통해 프로그래머가 특정 기술을 사용하기 쉽게 만들어준다.
- 개발자들에게 필요한 기능들을 추상화하고, 객체, 클래스 등을 제공
4. API의 종류
1. 윈도우즈 API
- 마이크로소트프 윈도우즈 운영체제가 사용하는 API
- c,c++ 프로그램에서 직접 운영체제와 상호 작용할 수 있도록 만들어짐
- 윈도우즈 운영체제에 대한 기본 서비스, 고급 서비스, 사용자 인터페이스, 네트워크 서비스, 셀 등 여러 기능들을 제공
2. 웹 API
- 웹 어플리케이션에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 API
- 대표적인 웹 API의 기술로는 XML,JSON,SOAP,REST등의 기술을 활용
- XML(Extensible Markup Language) : XML은 W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어이다.
- 제이슨(JSON): 비동기 브라우저/서버 통신(AJAX)을 위해 속성-값 쌍, 키-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷
- SOPA(Simple Object Access Protocol) : 웹서비스에서 기본적인 메시지를 전달하는 기반이 되는 HTTP, HTTPS, SMTP 등을 통해 XML기반의 메시지를 컴퓨터 네트워크상에서 교환하는 프로토콜이다.
- 레스트(REST) : 웹과 같은 분산 하이퍼 미디어 환경에서 자원의 존재/상태 정보를 표준화된 HTTP메소드로 주고받는 웹 아키텍처이다.
3. 오픈 API
- API 중에서 플랫폼의 기능과 콘텐츠를 외부에서 웹 프로토콜(HTTP)로 호출해 사용할 수 있게 개방(Open)한 API
- 개발자 사이트 등에서 제공하는 지도, 검색, 머신러닝 등 대부분 API는 HTTP로 호출할 수 있는 오픈 API에 해당
- 머신러닝(Machine Learning): 인공지능의 분야 중 하나로, 인간의 학습 능력과 같은 기능을 컴퓨터에서 실현하고자 하는 기술
4. Java API
- 자바를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합
- 입출력, 화면 구성, 이미지, 네트워크와 같이 복잡하지만 필요한 클래스들을 미리구현하여 사용자가 쉽게 구현하도록 하는 API