■ 보안기능 보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다. 주석문 안에 포함된 시스템 주요정보 ■ 개요 패스워드를 주석문에 넣어두면 시스템 보안이 훼손될 수 있다. 소프트웨어 개발자가 편의를 위해서 주석문에 패스워드를 적어둔 경우, 소프트웨어가 완성된 후에는 그것을 제거하는 것이 매우 어렵게 된다. 또한, 공격자가 소스코드에 접근할 수 있다면, 아주 쉽게 시스템에 침입할 수 있다. ■ 안전한 코딩 기법 주석에는 ID, 패스워드 등 보안과 관련된 내용을 기입하지 않는다. 코드예제 편리성을 위해 아이디, 패스워드 등 중요정보를 주석문 안에 작성 후 지우지 않는 경우 정보노출 보안약점..
■ 캡슐화 중요한 데이터 또는 기능성을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생하는 보안약점으로 정보노출, 권한 문제 등이 발생할 수 있다. 잘못된 세션에 의한 데이터 정보 노출 ■ 개요 다중 스레드 환경에서는 싱글톤(Singleton) 객체 필드에 경쟁조건(Race Condition)이 발생할 수 있다. 따라서, 다중 스레드 환경에서는 정보를 저장하는 전역 변수가 포함되지 않도록 하여, 서로 다른 세션에서 데이터를 공유하지 않도록 해야 한다. ■ 안전한 코딩 기법 싱글톤 패턴을 사용하는 경우, 변수 범위(Scope)에 주의를 기울여야 한다. 특히 다중 스레드 환경에서 클래스 변수의 값은 하위 메소드와 공유되므로 필요한 경우 인스턴스 변수로 선언하여 사용한다. 코드예제 다중 스레드 환경에서 파이썬의..
■ API 오용 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안약점이다. DNS lookup에 의존한 보안결정 ■ 개요 공격자가 DNS 엔트리를 속일 수 있으므로 도메인명에 의존에서 보안결정(인증 및 접근 통제 등)을 하지 않아야 한다. 만약, 로컬 DNS 서버의 캐시가 공격자에 의해 오염된 상황이라면, 사용자와 특정 서버 간의 네트워크 트래픽이 공격자를 경유하도록 할 수도 있다. 또한, 공격자가 마치 동일 도메인에 속한 서버인 것처럼 위장할 수도 있다. ■ 안전한 코딩 기법 보안결정에서 도메인명을 이용한 DNS lookup을 하지 않도록 한다. 코드예제 다음의 예제는 도메인명을 통해 해당 요청을 신뢰할 수 있는지를 검사한다. 그러나 공격자는 DN..
■ 코드오류 타입 변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안약점이다. 신뢰할 수 없는 데이터의 역직렬화 ■ 개요 직렬화(Serialization)는 프로그램에서 특정 클래스의 현재 인스턴스 상태를 다른 서버로 전달하기 위해 클래스의 인스턴스 정보를 바이트 스트림으로 복사하는 작업으로, 메모리상에서 실행되고 있는 객체의 상태를 그대로 복제하여 파일로 저장하거나 수신 측에 전달하게 된다. 역직렬화(Deserialization)는 반대 연산으로 바이너리 파일(Binary File) 이나 바이트 스트림(Byte Stream)으로부터 객체 구조로 복원하게 된다. 이 때, 송신자가 네트워크를 이용하여 직렬화된 정보를 수신자에게 전달하는 과정에서 ..
■ 입력데이터 검증 및 표현 프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정, 일관되지 않은 언어셋 사용 등으로 인해 발생되는 보안약점으로 SQL 삽입, 크로스사이트 스크립트(XSS) 등의 공격을 유발할 수 있다. 크로스 사이트 스크립트 (XSS) ■ 개요 크로스사이트 스크립트 공격(Cross-site scripting Attacks)은 웹사이트에 악성 코드를 삽입하는 공격 방법이다. 공격자는 대상 웹 응용 프로그램의 결함을 이용하여 악성코드(일반적으로 클라이언트 측 JavaScript 사용)를 사용자에게 보낸다. XSS 공격은 일반적으로 애플리케이션의 호스트 자체를 대상으로 하지 않고 애플리케이션의 사용자를 목표로 삼는다. XSS는 공격자가 웹 응용프로그램을 속여 사용..
■ 에러처리 에러를 처리하지 않거나, 불충분하게 처리하여 에러 정보에 중요정보(시스템 내부정보 등)가 포함될 때, 발생할 수 있는 취약점으로 에러를 부적절하게 처리하여 발생하는 보안약점이다. 오류 메시지 정보노출 ■ 개요 응용프로그램이 실행환경, 사용자 등 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성하여 외부에 제공하는 경우, 공격자의 악성 행위를 도울 수 있다. 예외발생 시 예외 이름이나 트레이스백(traceback)를 출력하는 경우, 프로그램 내부 구조를 쉽게 파악할 수 있기 때문이다. Django 프레임워크와 Flask 프레임워크는 HTTP 오류 코드가 있는 요청을 처리하기 위한 사용자 에러 페이지 핸들러를 제공한다. ■ 안전한 코딩 기법 오류 메시지는 정해진 사용자에게 유용한 최..
■ 캡슐화 중요한 데이터 또는 기능성을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생하는 보안약점으로 정보노출, 권한 문제 등이 발생할 수 있다. Public 메소드로부터 반환된 Private 배열 ■ 개요 Python은 명시적인 private 선언이 없다. 하지만 대부분의 Python 코드가 따르는 규칙으로 이름 앞에 밑줄(예:__spam)로 시작하면 Private으로 처리된다. 배열을 public으로 선언된 메소드를 통해 반환(return)하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열 수정과 객체 속성변경이 가능해진다. 배열 뿐 아니라 변경 가능한(mutable) 객체에 대해 모두 발생한다. public - attribute, method는 기본적으로 public protect - att..
■ 입력데이터 검증 및 표현 프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정, 일관되지 않은 언어셋 사용 등으로 인해 발생되는 보안약점으로 SQL 삽입, 크로스사이트 스크립트(XSS) 등의 공격을 유발할 수 있다. 코드 삽입 ■ 개요 공격자가 소프트웨어의 의도된 동작을 변경하도록 임의 코드를 삽입하여 소프트웨어가 비정상적으로 동작하도록 하는 보안 약점을 말한다. 코드 삽입은 프로그래밍 언어 자체의 기능에 한해 이뤄진다는 점에서 운영체제 명령어 삽입과 다르다. 취약한 프로그램에서 사용자의 입력 값에 코드가 포함되는 것을 허용할 경우, 공격자는 개발자가 의도하지 않은 코드를 실행하여 권한을 탈취하거나 인증 우회, 시스템 명령어 실행 등을 할 수 있다. Python에서 코드 ..
■ 입력데이터 검증 및 표현 프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정, 일관되지 않은 언어셋 사용 등으로 인해 발생되는 보안약점으로 SQL 삽입, 크로스사이트 스크립트(XSS) 등의 공격을 유발할 수 있다. SQL 삽입 ■ 개요 데이터베이스(DB)와 연동된 웹 응용프로그램에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우, 공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안취약점을 말한다. 취약한 웹 응용프로그램에서는 사용자로부터 입력된 값을 검증 없이 넘겨받아 동적쿼리(Dynamic Query)를 생성하기 때문에 개발자가 의도하지 않은 쿼리가 실행되어 정보유출에 악용될 수 있다. Python에서는 데..
공격자의 초점이 지속적으로 애플리케이션 계층을 향해 이동함에 따라 소프트웨어 자원보호가 중요해졌다. 최근 발생되는 인터넷상 공격시도의 약 75%는 소프트웨어보안취약점을 악용하는 것으로, 특히 외부에 공개되어 불특정다수를 대상으로 사용자 정보를 처리하는 웹 애플리케이션의 취약점으로 인해 중요정보가 유출되는 침해사고가 빈번하게 발생되고 있다. 보안강화를 위해 구축해놓은 침입차단시스템과 같은 보안장비로 응용프로그램 취약점에 대한 공격을 완벽히 방어하는 것은 불가능하다. 소프트웨어의 개발보안 미적용으로 제품 출시 때 수정 시 설계 단계보다 30배, 구현 단계 보다 20배가 넘는 수정비용이 필요 한 걸로 조사되었다. 국내의 경우, 2009년부터 전자정부서비스 개발단계에서 소프트웨어 보안약점을 진단하여 제거하는 소..
블록체인 관련 용어 ■ 자기 주권 신원 self-sovereign identity 기존 신원 확인 방식과 달리 분산 네트워크 기술을 활용하여 중앙 시스템에 의해 통제되지 않으며 개개인이 자신의 정보에 완전한 통제권을 갖도록 하는 기술 ■ 재전송 공격 replay attack 이전에 전송된 유효한 메시지를 다시 사용하는 공격 ■ 전자 서명 digital signature 서명자를 확인하고 서명자가 해당 전자 문서1)에 서명을 하였음을 나타내는데 이용하기 위하여 해당 전자 문서에 첨부되거나 논리적으로 결합된 전자적 형태의 정보. 전자 서명의 생성과 검증을 위해 각각 서명자가 가진 개인키와 해당 개인키에 대응하는 공개키를 사용함으로써, 서명자의 확인과 부인 방지가 가능하다. ■ 중간자 공격 man-in-the..
블록체인 관련 용어 ■ 블록체인 오라클 blockchain oracle 블록체인 시스템 외부에서 생성된 데이터를 이용하여 블록체인에 정보를 제공하는 서비스 ■ 블록체인 SW 플랫폼 blockchain software platform 블록체인 노드가 블록체인 시스템에 참여할 수 있도록 제공되는 프로세스, 저장소, 통신 기능의 집합 ■ 비잔틴 장애 허용 BFT, Byzantine Fault Tolerance 분산 환경에서 비잔틴 장애(단순 장애뿐만 아니라 담합, 거짓 응답 등 프로토콜의 규칙을 의도적으로 위반하는 행위)가 발생해도 정상적으로 합의를 도출할 수 있는 성질. 단, 전체 분산 개체 중 1/3 이상의 비잔틴 장애를 허용하는 프로토콜은 존재할 수 없다는 것이 증명되었다. ■ 비허가형 블록체인 perm..
블록체인 관련 용어 ■ 개인키 private key 공개키 암호 체계(public key cryptosystem)에서 각 사용자가 독립적으로 소유한 암호키의 하나로, 체계의 다른 사용자에게 공개하지 않고 비밀로 관리하여 사용하는 키. 개인키는 전자 서명 생성과 같이 개인키를 소유한 사용자임을 증명해야 하는 암호학적인 작업을 위해 사용된다. ■ 개체 entity 정보ㆍ통신 기술 시스템 내부 또는 외부의 사람, 기관, 기기, 프로세스 또는 이들의 집합 ■ 계정 account 시스템에 등록된 개체를 관리할 수 있는 식별자. 블록체인 솔루션에서 계정은 블록체인 노드(blockchain node), 서비스 제공자(service provider), 최종 사용자(end-user), 기기(device), 프로세스(pr..
블록체인의 기술적 특성 - 1 블록체인이란? ■ 블록체인 블록체인은 네트워크 내의 참여 개체가 공동으로 정보 및 가치의 이동을 기록·검증·보관·실행함으로써 중개자 없이도 데이터의 신뢰성 확보를 가능하게 하는 기술 jjanglabi.tistory.com 블록체인 구성 ■ 블록체인 아키텍처 일반적인 블록체인 아키텍처는 블록체인 SW 플랫폼, 블록체인 시스템, 블록체인 솔루션으로 구성되며, 이를 도식화하면 다음과 같다. 블록체인 SW 플랫폼은 각 블록체인 노드에 탑재되어 블록체인 노드가 블록체인 시스템에 참여할 수 있도록 제공되는 프로세스(암호 기능, 트랜잭션 관리, 스마트 컨트랙트, 탈중앙화 애플리케이션 등), 저장소(안전한 저장소, 원장 관리 등), 통신 기능(P2P/통신 프로토콜, 합의 프로토콜, 애플리..