SW 개발 보안

SW 개발 보안이란 시큐어코딩이라고도 하며, 안전한 개발을 위해 소스 코드 등에 존재하는 잠재적인 보안 취약점을 제거하고, 보안을 고려하여 기능을 설계 및 구현하는 등 소프트웨어 개발 과정에서 지켜야 할 일련의 보안 활동을 말한다.

 

기밀성, 무결성, 가용성을 지킨 구축방법을 SW 개발 보안의 3 요소라고 한다.

기밀성: 인가되지 않은 개인 혹은 시스템 접근에 따른 정보 공개 및 노출을 차단하는 특성
무결성: 정당한 방법을 따르지 않고는 데이터가 변경될 수 없으며, 데이터의 정확성 및 완전성과 고의/악의로 변경되거나 훼손 또는 파괴되지 않음을 보장하는 특성
가용성: 권한을 가진 사용자나 애플리케이션이 원하는 서비스를 지속 사용할 수 있도록 보장하는 특성

 

취약점

SW 개발 보안 용어 중 '위협이 발생하기 위한 사전 조건에 따른 상황'을 이르는 말로 '평문전송, 입력값 미검증, 비밀번호 공유' 등의 사례가 있음

자산: 조직의 데이터 또는 조직의 소유자가 가치를 부여한 대상
위협: 조직이나 기업의 자산에 악영향을 끼칠 수 있는 사건이나 행위
       (해킹, 내부의 인가받지 않은 임직원, 단체, 자연재해)
취약점: 위협이 발생하기 위한 사전 조건으로 시스템의 정보 보증을 낮추는데 사용되는 약점
          (평문전송, 입력값 미검증, 비밀번호 공유)
위험: 위협이 취약점을 이용하여 조직의 자산 손실 피해를 가져올 가능성

 

객체지향 프로그래밍

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 

클래스

객체지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 일종의 틀이자 데이터를 추상화하는 단위

 

인스턴스(객체)

물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말한다. 클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것.

 

객체지향 프로그램의 특성

1. 캡슐화, 정보은닉

객체의 상세한 내용을 객체 외부에 숨기고 단순 메시지 만으로 객체와 상호작용하는 것으로 부모 속성을 상속받아 자식이 사용할 수 있도록 하고 상위 메서드에 직접적인 접근을 막는 방식으로 활용된다.  이렇게 하면, 정보은닉 기능으로 불필요한 접근을 방지할 수 있다. getter, setter를 사용하는 것도 유사한 개념이다.

 

2. 추상화

사실을 그대로 객체로 표현하지 않고 중요한 측면을 중심으로 상세 내용을 없애는 과정. 객체지향 프로그래밍에서 클래스가 객체의 추상화된 속성을 가진 단위라고 할 수 있다.

 

3. 다형성

하나의 인터페이스를 이용해서 다양한 자식을 만들 수 있게하는 것. 공통의 클래스를 가지더라도 세부 속성에 따라 다양한 자식 속성이 나타나게 된다. 이를 다형성 Polymorphism 이라고 한다.

 

4. 상속성

수퍼 클래스의 성질을 서브 클래스에 자동으로 부여하는 것으로 상속 inheritance를 통해 이뤄진다. 서브 클래스에서는 수퍼클래스에서 만들어진 추상메서드를 정의하는 과정이 필요하며 다양한 특성의 서브 클래스로 만들 수 있다.

 

5. 연관성

클래스 간의 연관관계를 정의하는데 일반화, 상세화, 집단화로 나뉜다. 데이터를 상호 참조하는 관계를 나타낸다.

일반화는 공통된 성질들을 상위 객체로 정의하고 특수화된 객체들을 하위의 부분형 객체로 정의한다. (is-a)
연관화는 링크 개념과 유사하다. (is-member-of)
분류화는 객체 및 클래스의 인스턴스를 표현한다. 공통된 속성에 의하여 정의된 객체 및 클래스에 있어 구성원들의 인스턴스. (is-instance-of) 
집단화는 서로 관련 있는 여러 개의 객체들을 묶에 한 개의 상위 객체를 생성한다. '부분-전체' 또는 '부분'의 관계로 설명되는 연관성을 나타내는 용어이다. (is-part-of)

 

객체지향 프로그램의 장점

코드 재사용이 용이하고 유지보수가 쉽다. 클래스 단위 모듈화가 가능하기 때문에 대형 프로젝트에 적합하다.

 

객체지향 프로그램의 단점

처리속도가 상대적으로 느리다. 객체가 많으면 용량이 커질 수 있다. 설계시 많은 시간과 노력이 필요하다.

 

프로그래밍 언어의 종류

JAVA

분산 네트워크 환경에 적용이 가능하며, 멀티스레드 기능을 제공하므로 여러 작업을 동시에 처리할 수 있고, 운영체제 및 하드웨어에 독립적이며, 이식성이 강하며 캡슐화가 가능하고 재사용성이 높은 프로그래밍 언어

멀티스레드
일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행하는데, 멀티 스레드는 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 멀티 프로세스와 달리 속한 프로세스의 메모리를 공유하는 것이 멀티스레드이다. 따라서 자원 낭비가 적다. 하지만 반대로 싱글 스레드만 실행 중인 경우 오히려 실행시간이 개선되지 않고 오히려 지연될 수 있다.

 

JSP (Java Server Pages)

다양한 운영체제에서 사용 가능한 JAVA로 만들어진 서버용 스크립트 언어

HTML에 JAVA 코드를 넣어 동적 웹페이지를 생성하는 웹 어플리케이션 도구이다. JSP가 실행되면 자바 서블릿으로 변환되며 웹 어플리케이션 서버에 동작되면서 필요한 기능을 수행하고 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.

서블릿
클라이언트 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
서버 사이드 스크립트
서버측에 있는 프로그램으로 스크립트 형태로 된 것을 말한다. 클라이언트로 전송되지 않는 부분이며, 보안적인 측면에서도 리스크가 있어 클라이언트 단으로 오지 않는다. Node.js, Python, PHP, ASP, JSP 등이 있다.

 

ASP (Active Server Pages)

Microsoft에서 제작하여 Windows 계열에서만 수행가능한, 서버 측에서 동적으로 수행되는 페이지를 만들기 위한 프로그래밍 언어. IIS라는 웹서버에서 동작하는 언어이며 VBScript를 HTML 문서에 직접 코딩하여 동적 웹페이지를 구현하는 기술이다. 

 

PHP

HTML 문서에 PHP로 작성된 코드를 넣어 구현하는 기술이다. 문법은 C, JAVA와 유사하다. 동적 웹페이지 개발 분야에 많이 활용되며, 클라이언트에서 PHP 소스 코드를 볼 수 없다.  

 

JSTL (Java Server Pages Standard Tag Library)

HTML 내 java 코드 스크립틀릿을 대체해서 사용할 수 있도록 해준다. JSTL은 XML 데이터 처리와 조건문, 반복문과 같은 일을 처리하기 위한 JSP 태그 라이브러리를 추가해 JSP 사양을 확장했다.

JSTL 태그의 종류
Core tags, Function tags, Formatting tags, XML tags, SQL tags

 

Smalltalk

최초로 GUI를 제공한 언어로, 1세대 객체지향 프로그래밍 언어 중 하나로 순수한 객체지향 프로그래밍 언어

 

클라우딩 컴퓨터

데이터, 소프트웨어 및 다양한 컴퓨터 자원 등을 기존의 사용자가 소유하고 있는 PC나 스마트폰 같은 하드웨어에 두지 않고, 이것 중 필요한 것들만 인터넷을 통해 접근할 수 있도록 하는 것

 

인터랙션

입출력 장치를 매개로 디지털 시스템과 사람이 주고 받는 일련의 의사소통 과정

 


SW 개발 보안

객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)

개발자를 꿈꾸는 프로그래머 :: Java - (5) 객체란? 객체 지향 프로그래밍의 특징

[JSP] JSP (JavaServer Pages ) 란 무엇인가?

코딩의 시작, TCP School

자바서버 페이지 표준 태그 라이브러리 - 위키백과, 우리 모두의 백과사전

3.3.3. 서버사이드 스크립트란? Server Side Script(JSP, ASP, PHP) - IT 기술 노트

ASP, PHP, JSP 가 무엇인지 모르겠는 사람들을 위해

 

댓글