'보안코딩'에 해당되는 글 3건

  1. 2014.03.15 SW 보안 약점 진단 47개 진단항목 (1)
  2. 2009.09.21 mysqli 활용한 SQL Injection 예방 (1)
  3. 2009.09.16 프로그램 취약성 점검 및 보안 코딩을 위한 방안 비교
2014. 3. 15. 09:38

SW 보안 약점 진단 47개 진단항목

소스코드 취약점 진단컨설팅은 전자정부 SW개발단계부터 소스코드 보안약점 진단·제거 의무화에 따른 어플리케이션 개발 시 개발자에게 SW 보안 코딩 설계방안 제시 및 대응 할 수 있도록 하는데 목적이 있습니다.

평가대상

’12.12월 사업비 40억원이상 → ’14.1월 20억이상 → ’15.1월 5억이상 
범위 : 소스코드(신규개발 전체 및 유지보수로 변경된 부분), 단, 상용SW 제외

평가절차 
진단항목7개 유형 47개 진단항목(입력 데이터 검증 및 표현, 보안기능, 시간 및 상태, 에러처리, 코드오류, 캡슐화, API 오용)

유형주요내용개수 (47)
입력 데이터 검증 및 표현프로그램 입력 값에 대한 부적젃한 검증 등으로 인해 발생할 수 있는 보안약점  
1. SQL 삽입
2. 경로 조작 및 자원 삽입
3. 크로스사이트 스크립트
4. 운영체제 명령어 삽입
5. 위험한 형식 파일 업로드
6. 신뢰되지 않는 URL 주소로 자동접속 연결
7. XQuery 삽입
8. XPath 삽입
9. LDAP 삽입
10. 크로스사이트 요청 위조
11. HTTP 응답분할
12. 정수형 오버플로우
13. 보안 기능 결정에 사용되는 부적절한 입력값
14. 메모리 버퍼 오버플로우
15. 포맷 스트링 삽입
15
보안기능인증, 접근제어, 권한 관리 등을 적젃하지 않게 구현시 발생할 수 있는 보안약점  
1. 적절한 인증 없는 중요 기능 허용
2. 부적절한 인가
3. 중요한 자원에 대한 잘못된 권한 설정
4. 취약한 암호화 알고리즘 사용
5. 중요정보 평문저장
6. 중요정보 평문전송
7. 하드코드된 비밀번호
8. 충분하지 않은 키길이 사용
9. 적절하지 않은 난수 값 사용
10. 하드코드된 암호화 키
11. 취약한 비밀번호 허용
12. 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출
13. 주석문 안에 포함된 시스템 주요정보
14. 솔트 없이 일방향 해쉬 함수 사용
15 무결성 검사 없는 코드 다운로드
16. 반복된 인증시도 제한 기능 부재
16
시간 및 상태멀티프로세스 동작환경에서 부적젃한 시간 및 상태 관리로 발생할 수 있는 보안약점

1. 경쟁조건: 검사시점과 사용시점(TOCTOU)
2. 종료되지 않는 반복문 또는 재귀함수

2
에러처리불충분한 에러 처리로 중요정보가 에러정보에 포함되어 발생할 수 있는 보안약점
1. 오류메시지를 통한 정보노출
2. 오류 상황 대응 부재
3. 부적절한 예외 처리
3
코드오류개발자가 범할 수 있는 코딩오류로 인해 유발되는 보안약점
1. Null Pointer 역참조
2. 부적절한 자원 해제
3. 해제된 자원 사용
4. 초기화되지 않은 변수 사용
4
캡슐화불충분한 캡슐화로 인가되지 않은 사용자에게 데이터가 노출될 수 있는 보안약점 
1. 잘못된 세션에 의한 데이터 정보 노출
2. 제거되지 않고 남은 디버그 코드
3. 시스템 데이터 정보노출
4. Public 메소드로부터 반환된 Private 배열
5. Private 배열에 Public 데이터 할당
5
API오용부적절하거나, 보안에 취약한 API 사용으로 발생할 수 있는 보안약점 
1. DNS lookup에 의존한 보안 결정
2. 취약한 API 사용
2



  • 소스코드 취약점 50~60% 감소 
  • 유지보수단계의 비용보다 60배 절감
  • ROI(투자수익율) 21% 이상 향상
<SW 개발단계별 결함 수정비용 분석>
구분설계단계코딩단계통합단계베타제품제품출시
설계과정결함1배5배10배15배30배
코딩과정결함 1배10배20배30배
통합과정결함  1배10배20배



출처 : kisac.co.kr


Trackback 0 Comment 1
  1. Favicon of https://blog.pages.kr 날으는물고기 2014.03.15 10:41 신고 address edit & del reply

    시큐어 코딩(Secure Coding)
    프트웨어 보안 약점을 전자정부 서비스 개발단계에서 제거하기 위해 정보시스템 구축 시 ‘소프트웨어 개발보안(시큐어 코딩)’을 의무화

2009. 9. 21. 18:23

mysqli 활용한 SQL Injection 예방

SQL Injection 예방을 위한 DB 쿼리 방식을 mysqli 를 활용하여 Executes a prepared Query 방식을 통해 안전한 DB 쿼리를 할 수 있다.

이에 대한 예제를 참고로 기존 코드 및 차후 코드를 변경하는 것이 보안성 및 편리성을 추구할 수 있다.

아래에서 동일한 기능을 하는 간단한 예제 두가지 방식을 제시한다.

Example #1 Object oriented style

<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* check connection */
if (mysqli_connect_errno()) {
    
printf("Connect failed: %s\n"mysqli_connect_error());
    exit();
}

$mysqli->query("CREATE TABLE myCity LIKE City");

/* Prepare an insert statement */
$query "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)";
$stmt $mysqli->prepare($query);

$stmt->bind_param("sss"$val1$val2$val3);

$val1 'Stuttgart';
$val2 'DEU';
$val3 'Baden-Wuerttemberg';

/* Execute the statement */
$stmt->execute();

$val1 'Bordeaux';
$val2 'FRA';
$val3 'Aquitaine';

/* Execute the statement */
$stmt->execute();

/* close statement */
$stmt->close();

/* retrieve all rows from myCity */
$query "SELECT Name, CountryCode, District FROM myCity";
if (
$result $mysqli->query($query)) {
    while (
$row $result->fetch_row()) {
        
printf("%s (%s,%s)\n"$row[0], $row[1], $row[2]);
    }
    
/* free result set */
    
$result->close();
}

/* remove table */
$mysqli->query("DROP TABLE myCity");

/* close connection */
$mysqli->close();
?>

Example #2 Procedural style

<?php
$link 
mysqli_connect("localhost""my_user""my_password""world");

/* check connection */
if (mysqli_connect_errno()) {
    
printf("Connect failed: %s\n"mysqli_connect_error());
    exit();
}

mysqli_query($link"CREATE TABLE myCity LIKE City");

/* Prepare an insert statement */
$query "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)";
$stmt mysqli_prepare($link$query);

mysqli_stmt_bind_param($stmt"sss"$val1$val2$val3);

$val1 'Stuttgart';
$val2 'DEU';
$val3 'Baden-Wuerttemberg';

/* Execute the statement */
mysqli_stmt_execute($stmt);

$val1 'Bordeaux';
$val2 'FRA';
$val3 'Aquitaine';

/* Execute the statement */
mysqli_stmt_execute($stmt);

/* close statement */
mysqli_stmt_close($stmt);

/* retrieve all rows from myCity */
$query "SELECT Name, CountryCode, District FROM myCity";
if (
$result mysqli_query($link$query)) {
    while (
$row mysqli_fetch_row($result)) {
        
printf("%s (%s,%s)\n"$row[0], $row[1], $row[2]);
    }
    
/* free result set */
    
mysqli_free_result($result);
}

/* remove table */
mysqli_query($link"DROP TABLE myCity");

/* close connection */
mysqli_close($link);
?>

위 예제의 출력:

Stuttgart (DEU,Baden-Wuerttemberg)
Bordeaux (FRA,Aquitaine)


예제 출처 : http://kr.php.net/

Trackback 0 Comment 1
  1. SQL 인젝션 2009.09.22 15:30 address edit & del reply

    http://www.php.net/manual/kr/security.database.sql-injection.php

2009. 9. 16. 14:48

프로그램 취약성 점검 및 보안 코딩을 위한 방안 비교

1.       소스 보안 분석 툴 활용
포티파이
SCA(Fortify Source Code Analysis) 4.0
클록워크
(Klockwork) K7,5,
온스 랩스(Once Labs) 온스
4.1
아모라이즈(armorize)
Securecode
컴퓨웨어(Compuware)
DevPartner Security checker

사용시점 : 개발시 부터 활용 가능

: 개발자
적용기간 : 1주일 이내/Web Application
    :  2~3/개발자(최소 사용자 제한으로 가격 매우 고가
)
    : 어플리케이션 보안의 가장 근본적인 대책은 소스보안 이라는 부분에서

          
접근하였으나 비용 측면에서 매우 고가이며, 툴은 일뿐이라는 상식
          
벗어나지는 못함.
    : 투자대비 효과 측면에서 솔루션과 비교하여 차이 없음

2.       어플리케이션 취약성 분석 툴
Watchfire의 Appscan 7.6 kor
Acunetix의 Web vulnerability Scanner 5
패닉시큐리티 PSSCANWEB
잉카인터넷   nProtect WebScan
이븐스타     BigLook Scanner

사용시점 :  개발 완료후 테스트 시점  및 운용단계
            (Appscan은 개발시 부터 활용가능)
사 용 자 : 개발자 및 전산 관리자, 보안 관리자
적용기간 : 1일 (취약성 분석 기간),  조치 기간은 개발자의 능력에 따라 상이함
    액 :  1천~1억 대(기능에 따라 가격차 천차만별)
    뷰 : 개발 시에 보안을 고려한 개발은 시간적 금전적으로 많은 비용이 수반
           되는 단점으로 인하여, 이를 극복하고자 거꾸로 해커입장에서 취약성을
           자동 분석하고 그에 대한 보고서 및 조치방안 까지 제공하여 소스보안
           과 동일한 효과를 내며, 투자대비 좀더 효율적이며, 다양한 용도로 활용
           가능하다. 소스분석 툴과 마찬가지로 툴이라는 한계는 벗어나지 못함.
           일부 국산 툴은 국정원 보안성 심사라는 형식에 치우친 나머지 수준이하의
           기능을 보임.

3.       Secure Module(보안 모듈)
사용시점 : 개발 시부터 활용 가능
사 용 자 : 개발자
적용기간 : 2-3일 이내/Web Application
    액 : 2~3천 내외/Web Application
    뷰 : 개발 시 사용되는 보안 핵심프로세스를 일반 초보 개발자도 손쉽게 적용 가 
             능토록 한 부분이 매우 인상적(초보 개발자도 전체 취약점의 70~80%이상 제
             거 가능), 소스분석 툴이나 취약성분석 툴과 같은 툴의 한계성은 존재하나,
            보안전문가에 의한 모의해킹 및 취약성 분석 비용이 포함된 금액이기 때문에
            비용대비 효과 측면에서 매우 뛰어나다. 또한, 추가비용 없이 타 솔루션에 비
            하여 매우 높은 보안성 구현이 가능한 것이 장점이다.

4.        
최근 개인정보 누출 및 홈페이지 위,변조, 사이버해킹 등의 사고가 빈번하게 발생함에 따라 그와 관련된 솔루션 들이 봇물을 이루고 있지만 자동화된 툴 및 솔루션으로는 그 방어에 한계가 있다는 것을 반드시 염두에 두어야 할 것이다. 반드시 관련 솔루션을 도입 시에 보안전문 컨설턴트에 의한 컨설팅 제공여부를 확인하지 않으면 비용은 비용대로 지불하고 사상누각을 지은 형국이 되고 말 것이다. 


출처 : http://blog.naver.com/bush42

Trackback 0 Comment 0