정적분석기술을 이용한 sw오류 자동 검증 Airac의 예를통해서

Slides:



Advertisements
Similar presentations
지금의 소프트웨어 기술 얼마나 미개한가 이광근 교수. 이력 ’87 학사 (computer science & statistics) 서울대 ‘93 박사 (computer science) University of Illinois at Urbana-Champaign ‘93-’95:
Advertisements

Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
© DBLAB, SNU 화일구조. 강의 소개 - 화일구조  Instructor : Prof. Sukho Lee (301 동 404 호 )  홈페이지 :  교과목 개요 – 이 과목은 데이타 관리와 응용을 위한 화일 구조의 설계와.
ch19–9. 악의적인 소프트웨어 - Malicious Software -
Linux Seminar #1 리눅스 이해하기.
화일구조.
New Infrared Technologies의High Speed 열화상 스캔 시스템 소개
6조: 이봉재,황준연,양재근,박영진,김지원,이태희
세종대학교 항공우주공학과 유도항법제어연구실
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
사용자 메뉴얼 차량용 4CH 블랙박스 매뉴얼 버전 : Version 2.1 Hardware Version : 2.0
제 2장 컴퓨터 구조.
㈜디알디 코리아 ㈜드림유비인터내셔날 지 명 원.
사용자 메뉴얼 차량용 4CH 블랙박스 매뉴얼 버전 : Version 1.1 Hardware Version : 1.0
Operating Systems Overview
시스템 생명 주기(System Life Cycle)(1/2)
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
Chapter 32 Analyzing Web Traffic
10장 예외 처리 프로그래밍 언어론 10.6 Pascal과 C의 에러 처리 10.1 설계 주제 10.2 PL/I의 예외 처리
프로그래밍 언어론 2004년 가을학기 창 병 모 숙명여대 컴퓨터과학과.
Internet Computing KUT Youn-Hee Han
12. 데이터베이스 설계.
소프트웨어 공학 (Software Engineering)
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
시스템 생명 주기(System Life Cycle)(1/2)
임베디드 운영체제 (리눅스 중심) Lecture #2.
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
목표 구성 의료분야에서 사용되는 운영관리 개념과 계량적 분석기법 이해
저전력 고효율 발열시트를 이용한 온실 자동화 시스템 제안서.
컴퓨터 구조.
자료구조 김현성.
임베디드 시스템 개론 3주차 Embedded System..
Ch2-2. VHDL Basic VHDL lexical element VHDL description
Embedded System Porting (2)
CRM에서의 Data Quality Management
프로그램 분석의 구현.
효율적인 포인터 오류 검증 이욱세 한양대학교 컴퓨터공학과
An Intra-Task DVFS Technique based on Statistical Analysis of Hardware Events 순천향대학교 컴퓨터학부 윤희성.
Beginning Linux Programming
디지털 피킹 SYSTEM 설명서.
임베디드 소프트웨어 설계.
소프트웨어 오류 자동 검증 기술.
Lecture 01: Compiler Overview
사회복지프로그램 기획 및 평가 -로직모델을 중심으로 김유심(가양4종합사회복지관장) 프로그램의 개발과 평가의 개념
10. 소프트웨어 아키텍처 뷰 설계 명지대학교 융합소프트웨어학부 김정호 교수.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Introduction to Programming Language
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
[CPA340] Algorithms and Practice Youn-Hee Han
DataScience Lab. 박사과정 김희찬 (화)
제 1 장. 자료구조와 알고리즘.
프로그램 분석 기술의 산업체 이전을 위해서 이광근 서울대 컴퓨터공학부
Chapter 4 변수 및 바인딩.
소프트웨어 형상관리: 목차 변경 및 형상관리의 기초 개념 형상항목 확인 및 버전관리 변경관리 감사 및 감사보고 99_11
Chapter 02. 소프트웨어와 자료구조.
화일구조.
CHAPTER 04 파일 설계(FiLE Design).
13. 이상징후를 찾아내는 방법(5관)의 확대 앞에 나타낸 표는 매우 간단한 것이다. 설비의 어떤 특징을 찾아 낼 것인가는 설비에 따라 서로 다르다. 같은 기계에서도, ► 동적기계 : 예를 들면 회전기계, Motor등 기계 자체가 소리나 진동을 발생하고 있는 것. ►
Signature, Strong Typing
Signature, Strong Typing
PhoeniX Technologies Incorporated
Signature, Strong Typing
히스토그램 그리고 이진화 This course is a basic introduction to parts of the field of computer vision. This version of the course covers topics in 'early' or 'low'
프로그램분석 어떻게하나 (quick/tiny)
GDB - GNU Debugger 김진용.
제5장 디버깅과 추적 문봉근.
프로젝트 실행 오류와 해결.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
Aggregated K-nearest neighbor queries for High – dimensional data Eojin Yun, Dept. of Computer Science and Engineering, POSTECH. Motivation 만약.
Presentation transcript:

정적분석기술을 이용한 sw오류 자동 검증 Airac의 예를통해서 이광근 프로그래밍 연구실 서울대 컴퓨터공학부 4/21/2005 @ Netsec’05

차례 프로그램 정적분석 기술 소개 Airac 소개

소프트웨어 오류의 비용 소프트웨어 오류를 일반사람들이 점점 접한다: 일상=컴퓨터 오류로 인한 불편이 사회적 문제가 된다. 소프트웨어 오류에 대한 책임소재 입법화. 소프트웨어 개발업체의 대응: 보험을 든다. 소프트웨어 가격의 상승. 모든 제품의 경쟁력 = 무결점/고품질 저비용 소프트웨어

소프트웨어의 오류 잡는 기술 만족스럽지못한 현재 새로운 기술 sw tests runtime monitoring field manual 새로운 기술 프로그램 분석기술 static program analysis 30-40년간 연구된 기술 산업체에서 관심가지기 시작

아이락 = 소프트웨어 MRI Airac Parsing and transformation done: 25 ast nodes Option: the unrolling depth 3 the unrolling bound 0 Analysis begins Fixpoint iterations with widening Fixpoint iterations with narrowing Result: array index out of bound at (file: a.c, line: 13) Overflow (array index: [24, 24], array size: [10, 10])

아이락 Airac static analyzer for automatic verification of array index ranges in C programs 소프트웨어의 오류 (메모리접근오류) 자동 검출기 무결점 소프트웨어의 저렴한 개발을 위한 첨단 기반기술 전세계적으로 2003년 이후에야 실용화되고있는 기술 소프트웨어를 테스트하지 않고 자동으로 모든 오류를 찾아줌: 저비용 무결점 달성 기술 (정적프로그램분석기술static program analysis) 2004년 스탠포드대학의 도슨 앵글러 교수가 상용화한 검증기 성능을 능가.

프로그래밍 연구실 + 프로그램 분석 시스템 연구단 프로그래밍 연구실 + 프로그램 분석 시스템 연구단 1995-2003 KAIST, 2003-now SNU 1998-2003 과기부 창의적연구 진흥사업 지정 프로그램분석 시스템 연구단 목표: 무결점 소프트웨어를 만들고 확인할 수 있는 원천 기술 연구 “The Open Problem in Computer Science”

static program analysis 원천 기술 프로그램 분석기술 static program analysis 실행전에 실행성질을 자동으로 안전하게 어림잡는 일반적인 방법

프로그램 분석 static program analysis “실행전”: 프로그램을 돌리기 전에 “실행성질”: 실행중의 프로그램 성질 “자동으로”: 프로그램이 프로그램을 분석 “안전하게”: 모든 실제상황을 포섭 “어림잡는”: 군더더기가없을 순 없다 “일반적인”: 대상 소스 언어와 실행성질이 무제한

프로그램 분석기술의 쓰임새 프로그램의 오류 자동 검증 프로그램 최적화를 위한 정보제공 프로그램 이해/관리를 위한 정보제공 실행중에 이러이러하면 안되는 데, 혹시? “오류”의 정의에 따라서 다양하게: “보안 오류” 프로그램 최적화를 위한 정보제공 이 부분은 중복되는 일을 하는군 이 부분은 자원을 필요이상으로 소모하는군 프로그램 이해/관리를 위한 정보제공 이 변수와 관계되는 프로그램 부분들만 프로그램이 어느 테이블을 건드리는지

프로그램 분석 기술들 프로그램 분석(static program analysis) 20-30년 동안 학교에서 무르익은 기술 요약해석(abstract interpretation) 타입시스템(type system) 자료흐름분석(data flow analysis) 자동증명(theorem proving) 모델검증(model checking) 20-30년 동안 학교에서 무르익은 기술 위의 기술의 조합이 이제 비로소 실용적인 모습으로 현장으로 퍼지고 있슴

프로그램분석 기술이 실제에 적용된 예 Microsoft (2002년-현재) AirBus (2002년-현재) 프로그램분석 기술이 실제에 적용된 예 Microsoft (2002년-현재) device driver sw 검증에 적용 안전한, 오류없는 sw개발에 집중: 요즘 Bill Gates 연설의 기초 AirBus (2002년-현재) aviation controller모듈 sw 검증에 적용 AirBus sw개발 프로세스의 표준으로 프로그램분석 과정을 포함 삼성전자 소프트웨어 센터 (2004년-현재) Airac: 다양한 sw 검증에 적용 이기술에 특화된 회사들 등장: AbsInt, Coverity, PolySpace technologies, Trusted Logic, GrammaTech, Esterel Technologies, etc.

Value = Int U Real U Addr U Tree U Exception 프로그램의 실행 Value = Int U Real U Addr U Tree U Exception val(x) val(*p) val(p) 1 2 11 3 4 5 11 3 4 5 11 3 4 5 22 8 9 8 9 8 9 2 3 4 99 2 3 4 99 2 3 4 time

프로그램의 분석: 요약실행 V = I U R U A U T U E v(x) v(*p) v(p) pgm point 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pgm point

Value = Int U Real U Addr U Tree U List U Exception 프로그램의 실행 Value = Int U Real U Addr U Tree U List U Exception v(x) v(y) 1 2 11 3 4 5 11 3 4 5 11 3 4 5 22 8 9 8 9 8 9 2 3 4 99 2 3 4 99 2 3 4 time

프로그램의 분석: 오류 검증 V = I U R U A U T U E v(x) v(*p) v(y) pgm point 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pgm point

Value = Int U Real U Addr U Tree U List U Exception 프로그램의 실행 Value = Int U Real U Addr U Tree U List U Exception val(x) val(y) 1 2 11 3 4 5 11 3 4 5 11 3 4 5 22 8 9 8 9 8 9 2 3 4 99 2 3 4 99 2 3 4 time

프로그램의 분석: 허위경보 V = I U R U A U T U E v(x) v(y) 프로그램 분석의 정확도 문제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pgm point

Value = Int U Real U Addr U Tree U List U Exception 프로그램의 실행 Value = Int U Real U Addr U Tree U List U Exception val(x-y) 1 2 11 3 4 5 11 3 4 5 11 3 4 5 22 8 9 8 9 8 9 2 3 4 99 2 3 4 99 2 3 4 time

프로그램의 분석: 관계형분석 V = I U R U A U T U E v(x-y) pgm point 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pgm point

프로그램 분석의 3-스텝 입력: 프로그램 step1: “연립방정식”을 세운다 step2: 그 방정식을 푼다 모든것이 요약된 세계에서 (abstract domain) 모든 프로그램의 상태가 어떻게 변화되 가는지 (abstract execution flow) step2: 그 방정식을 푼다 step3: 그 해를 가지고 결론을 내린다 있는가 없는가? 같은가 다른가?

Airac Static Analyzer for Automatic Verification of Array Index Ranges in C Programs

Airac int *c = (int *)malloc(sizeof(int)*10); C 프로그램의 메모리접근 오류 자동 검출 c[i] = 1; c[i + f()] = 1; c[*k + (*g)()] = 1; x = c; x[1] = 1; y = c + f(); y[*(y+1)] = 1; z->a = c; (z->a)[i] = 1; foo(c+2); int foo(int *d) {… d[i] = 1; …}

Airac keywords C: analyzes ANSI C + (GNU) program pointers(array, procedure) controls(procedure, return, break, goto) intra- and inter-procedural statically: no test runs all: complete, no un-noticed bug automatic: a software always stops: for infinite-loop programs modular: for large programs correct: solid theoretical foundation

Airac: performance (1/3) (commercial softwares) X Softwares Alarms Real Errors LOC Time (min) 검증용 Code 46 34 4,688 306 A1 18 9 280,379 8 A2 196 56 3,584,664 789 A3 78 15 119,211 82 A4 435 7 806,829 112 A5 197 517,314

Airac: performance (2/3) Linux kernel 2.6.4 Alarms Real Errors LOC Time (sec) vmax302.c 1 246 0.28 xfrm_user.c 2 1,201 45.07 usb-midi.c 10 4 2,206 91.32 atkbd.c 811 1.99 keyboard.c 1,256 3.36 af_inet.c 1,273 1.17 eata_pio.c 3 984 7.50 cdc_acm.c 849 3.98 ip6_output.c 1,110 1.53 mptbase.c 6,158 0.79 aty128fb.c 2,466 0.32

Airac: performance (3/3) GNU Softwares Alarms Real Errors LOC Time (sec) tar-1.13 66 1 20,258 577 bison-1.875 50 15,907 809 sed-4.0.8 29 6,053 1154 gzip-1.2.4a 17 7,327 794 grep-2.5.1 2 9,297 604

Airac: scalability

Airac vs Swat (1/3) (국제경쟁력) Linux kernel 2.6.4 SWAT (Stanford) AIRAC (서울대) Found Errors /drivers/mtd/maps/vmax301.c 1 /net/xfrm/xfrm_user.c /drivers/usb/class/usb-midi.c 2 /drivers/input/keyboard/atkbd.c /drivers/char/keyboard.c /net/ipv4/af_inet.c /drivers/scsi/eata_pio.c /drivers/usb/class/cdc-acm.c (*) 3 /net/ipv6/ip6_output.c (**) /drivers/message/fusion/mptbase.c /drivers/video/aty/aty128fb.c

Airac vs Swat (2/3) Airac Bugs Coverity

Airac vs Swat (3/3) 구분 SWAT (Coverity社) AIRAC (서울대) 에러 검출력 62% detect율 (8/13) 100% detect율 (13/13) A 적용결과 #Alarms: 19 buffers #Real Errors: 2 buffers #False Alarms: 17 buffers Time: 7 min #Alarms: 78 #Real Errors: 15 access (5 buffers) #False Alarms: 63 access (18 buffers) Time: 82 min B 적용결과 #Alarms: 2 buffers #False Alarms: 0 buffers Time: 4 min #Alarms: 18 #Real Errors: 9 access (2 buffers) #False Alarms: 9 access (6 buffers) Time: 8 min

cdc_acm.c (Linux device driver)

rmt.c (GNU software – tar)

hardtoswat.c (homemade sample)

감사합니다 ropas.snu.ac.kr/airac