امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

41
ی ه ساز م ا رن ب های ان ن ر ز ب ی ن ت ب م ت ی ت م ا ا ب ن ت س دو ب ل ع ران مهSoftware Security & Secure Software Engineering

Upload: chip

Post on 15-Feb-2016

144 views

Category:

Documents


2 download

DESCRIPTION

Software Security & Secure Software Engineering. امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا. فهرست مطالب. مقدمه ای بر LBS. سیاست های ایمنی و تحلیل آن. امن کردن زبان های برنامه سازی. کامپایلر های خبره و تصدیق گر کد ها. روش های امن سازی انواع داده ای( Data Type ). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

امنیت مبتنی بر زبان های برنامه سازی

مهران علیدوست نیا

Software Security & Secure Software Engineering

Page 2: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

2

فهرست مطالب

LBSمقدمه ای بر سیاست های ایمنی و تحلیل

آنامن کردن زبان های برنامه سازی

کامپایلر های خبره و تصدیق گر کد ها Dataروش های امن سازی انواع داده ای)

Type)

Page 3: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

3

به دالیل زیر زبان های برنامه سازی یک ابزار قوی جهت تامین امنیت نرم افزار است:

طراحی زبان های برنامه سازی امن تر•جلوگیری از تولید برنامه های مخرب در •

زمان کامپایل و پیش از اجرابازنویسی کد های برنامه•بازرسی و بازبینی برنامه ها•

چرا زبان های برنامه سازی؟

Page 4: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

4

فقط کافی است تصور کنید که یک برنامه باداشته باشیم. خط کد 20.000.000

1000 مختلف دنیا بر نقطه 100از برنامه نویسروی آن کار کنند.

این کامپیوتر 100.000.000و در نهایت رویبرنامه اجرا شود و یا دست کم این تعداد کامپیوتر در

اجرای آن نقش داشته باشند در حالی که هر یک خط از برنامه می تواند تاثیرات

دلخواه داشته باشد! این ها همه در شرایطی است که حداقل امتیازات

مورد نیاز را در اختیار برنامه قرار می دهیم!

چرا زبان های برنامه سازی )ادامه(

اصالح کدها در تامین امنی:ت ت:ا چ:ه ح:د می

تواند مفید باشد؟!!

Page 5: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

5

دیدگاه های مختلف امنیت در سیستم های رایانه ای:

( سخت افزارHardware)(سیستم عامل و کرنلOS)( زبان های برنامه سازیPL)( نرم افزارSoftware)

چرا زبان های برنامه سازی )ادامه(

Page 6: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

6

الزمه برقراری امنیت در زبان های برنامه سازی اطمینان از اجرای یک سری قوانین

است.( ایجاد سیاست های ایمنیSafety Policy)هر سیستمی در ابتدا به یک سری قوانین نیاز داردقانون گذار و اجرا کننده قانون وظیفه قانون گذار وضع قوانین درست و وظیفه

مجری، اطمینان از اجرای کامل قوانین است

امنیت در سطح زبان های برنامه سازی

Page 7: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

7

جلوگیری از وقوع رخداد های بدسرویس های حیاتی سیستم غیر فعال شودنشت اطالعات محرمانهاطالعات مهم سیستمی آسیب ببینندسیستم برای شکستن کپی رایت استفاده شود... و

اهداف سیاست های ایمنی

Page 8: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

8

در این قسمت می بایست به این سواالت پاسخ دهیم:

یک سیاست ایمنی چگونه بیان می شود؟•کدام سیاست ها قابل تعریف هستند؟•چه چیزهایی اجرای سیاست های ایمنی را •

ضمانت می کند؟به چه چیزهایی می توان اعتماد کرد؟•اجبار به اعمال سیاست های ایمنی چگونه انجام •

می گیرد؟

Safetyسیاست های ایمنی )Policy)

Page 9: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

9

عملیات خواندن داده ها و سیاست ایمنی: •ارسال آن به طور هم زمان انجام نشود!

بیان سیاست های ایمنی در سطوح •مختلف

در سطح کد•void safesend(){if(disk_read) die();…}

یک سیاست ایمنی چگونه بیان می شود؟

Page 10: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

10

در سطح منطقی• states s. read(s) (forever(not(send)))(s)

در سطح آتوماتا •

یک سیاست ایمنی چگونه بیان می شود؟)ادامه(

S Xsend

sendreadread

Page 11: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

11

کدام سیاست ها قابل تعریف هستند؟

safety properties

Information Flow

liveness properties“bad thing never happens”

ارسال بعد از خواندن، قفل کردن درخواست مجدد، تخطی از محدودیت منابع

“good thing eventually happens” محرمانگی در برابر درستی در اجراآزاد کردن منابع در بند، اجرای درخواست ها

فقط سطو:ح دسترسی کافی نخواهد بود

Page 12: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

12

انواع رویکرد ها در اجرای سیاست های ایمنی (Enforcement)(آنالیز ایستاStatic Analysis قبل از اجرای :)

برنامه(آنالیز پویاDynamic Analysis در هنگام اجرای :)

برنامه(آنالیز پس از اجراpost-mortem Analysis)

دانستن در مورد شکاف ها بهتر از هیچی است!!!

چگونگی اجرای سیاست های ایمنی

Page 13: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

13

اجزایی از سیستم که شکست آنها باعث به خطر افتادن امنیت کل سیستم می شود:

TCB یک سیستم عامل شامل کرنل، سیستم محافظت از حافظه و مدیریت دیسک است.

یکی از چالش ها انتخاب سایزTCB با توجه به کاربرد موجود است.

Trusted Computing Base (TCB)

Page 14: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

14

TCBکوچک یا بزرگ؟

TCB بزرگ و پیچیده خطر وجود باگ ها در سیستم را افزایش داده و همچنین سیستم را

ممکن است با مشکالت امنیتی روبرو سازدTCB ساده و کوچک می تواند راحت تر تست و

چک شود و قابلیت اطمینان بیشتری را ایجاد می کند.

TCBاندازه

Page 15: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

15

به چه کد هایی می توان اعتماد کرد؟ قابلیت اعتماد یعنی اینکه تا چه اندازه می توان به

درستی کد ها اطمینان داشت. همواره حداقلی برای اعتماد به کد ها در نظر

گرفته می شود. اصل اعتماد: هر چه کمتر اعتماد کنیم امنیت

سیستم باالتر خواهد بود. راه حل کلیدی داشتن کامپایلر های امن با قابلیت

اعتماد باال میباشد.

قابلیت اعتماد

Page 16: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

16

Least Privileges هر قسمت برای اجرای درست عملیات خود می

بایست یکسری امتیازات جهت دسترسی به منابع و امکانات سیستم داشته باشد.

در بعد سیستم عامل این اختیارات به صورتدر اختیار کاربران قرار می گیرند.دانه درشت

در زبان های برنامه سازی مدرن این سطوح زبان مربوط، انواع داده ایامنیتی با توجه به

مدلسازی و اجرا می شوند.

امتیازات حداقلی

Page 17: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

17

پیش از اجرا: شامل آنالیز کد، رد کردن کد وبازنویسی

( در حال اجرا: بازرسی، الگ، ایستhaltو تغییر )( پس از اجرا: باز گرداندن به عقبroll back ،)

( restoreبازرسی، بازیابی کردن )

بهترین زمان برای اعمال سیاست ها؟

Page 18: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

18

مقادیر پیاده سازی شده توسط برنامه، به طور مرeبوط به آن زبان بستگی دارد.DTمستقیم به

ADT انواع داده ای که فقط به وسیله یک سری :واسط های خاص مورد دسترسی قرار می گیرند.

انواع داده ای می توانند از داده های ذخیره شده(.Private Dataداخلی خود محافظت نمایند )

Type Safety

Page 19: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

19

امنیت انواع داده ای به سه طریق قابل اجرا خواهند بود:در زمان اجرا( در زمان کامپایلML)( به طور تلفیقیJAVA)

Type Safety

Page 20: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

20

In-line Referenced Monitor (IRM)Typed Assembly Language (TAL)Proof-carrying Code (PCC)Certifying compilation

آنالیز ایمنی

Page 21: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

21

مشاهده اجرای یک برنامه و ایست برنامه در صورت نقض سیاست های ایمنی

مثال :حفاظت از حافظهکنترل سطح دسترسیدیوار آتش... و

Referenced Monitor

Page 22: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

22

سیستم عامل نمی تواند RMنکته مهم اینجاست که همه وقایع سیستم را مورد ارزیابی و بازرسی قرار

دهد!نیاز به یک مفسر برای اجرای دینامیک داردکارایی را به نوبه خود کاهش می دهد بیشتر مکانیزم های موجود جهت اجرای سیاست

استفاده می کنند.RMهای ایمنی از در نهایت مونیتور ها در دستورات ادغام می

گردند.

Referenced Monitor

Page 23: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

23

Referenced Monitor

Extension

EMBase system

Reference monitorEM

Extension

Base system

InterpreterExtension

Base system

EM

Program instrumentation

Page 24: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

24

RM را ببیند و در نتیجه نمی گذشته فقط می تواند ها را نیز اجرا نماید.liveness policyتواند

برای مثال محاسبه اینکه چه موقعی سیستم باید( قرار گیرد.haltبه طور دقیق در حالت ایست )

در این موقع بحثSoftware Fault Isolation (SFI) مطرح می گردد.

فضای کامپوننت های نرم افزاری را در هماننگه می دارد در این شرایط آدرس سخت افزاری

برنامه ها می توانند از کد های نا امن بدون ایجاد سربار حفاظت از حافظه استفاده کنند.

Inlined Reference Monitor

Page 25: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

25

:ایده- ادغام یک سری سیاست های ایمنی دلخواه در کد

های نا مطمئن در زمان اجرا:نتایج حاصله

اجرا سربار- کاهش - سیاست های ایمنی می توانند متناسب با

برنامه های کاربردی و حتی متناسب با خصوصیاتکاربران خاص اعمال شوند. )با توجه به اینکه در

سطح کرنل و یا سیستم عامل عمومی و کلی تعریف میشدند(

Inlined Reference Monitor

Page 26: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

26

ایمنی حافظه نداشتن مشکالتی از قبیل کد های خود اصالح گر

(self-modifying Codes ) ( نداشتن مشکالت پرش های غیر منطقیWild

Jumps )-Typeجاوا به عنوان یک زبان برنامه نویسی

Safe های به حافظه اشاره گر برنامه ها نمی توانند از

را جعل کنند. فیلد ها و متد های خصوصی هر شی فقط

توسط همان شی مورد دسترسی قرار می گیرند.

-Typeزبان های برنامه سازی Safe

Page 27: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

27

بر 1998سابقه استفاده از آن به سال می گردد.

دو ایده در ایجادTAL: در خالص شدن ا:ز شر کامپایلر ها یا مفسر ها

پروسه اعمال سیاست های ایمنی فراهم کردن( نوع داده کلیGeneric Data Type )

برای کد کردن انواع داده های سیستمی سطح باال

بیت اینتل قابل 32در عمل بر روی پردازند های استفاده می باشد.

TAL

Page 28: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

28

Review on JVM

Page 29: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

29

Type-Based Protection (JVM)

Java Source

javac

JVM bytecodes

JVM verifier System Interface

Binary

JIT compiler

SystemBinary

JVMInterpreter

Trusted Computing Base

Page 30: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

30

Ideal

Your favoritelanguage

Low-Level IL)SSA(

optimizer

machine code

verifier System Interface

SystemBinary“Kernel”

TAL در عمل بسیار شبیه JVM عمل می کندCLRو حتی

Page 31: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

31

Proof-Carrying Code (PCC)

Your favoritelanguage

Low-Level IL

optimizer

machine code

verifier SecurityPolicy

SystemBinary

trusted computing base

پیدا کردنProof ها سخت است

اماverify کردن آنها راحت است!

Page 32: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

32

Certifying Compiler

Source

Certifying Compiler

VC Generator

VC

Native Code

Annotations

Proof

VC

Axioms & Rules

Proof Generator

Axioms & Rules

Proof Checker

VC Generator

Code Producer Code Consumer

Page 33: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

33

کامپایلر هایی که به طور اتوماتیکPCC را تولید می کنند

VC در معماری قبل :Verification Condition ایمنی کد را پیش بینی می نماید.

VC Generator شرایط تصدیق یک کد را تولید می :کند.

Proof تصدیق هایی که امنیت هر کد را تضمین :می نماید.

بیت اینتل قابل 32در عمل بر روی پردازند های استفاده می باشد.

Certifying Compilers

Page 34: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

34

PCCمزایای

Type-specialized PCC Foundational PCC

- Relies on VCgen- First-order logic- Built-in understanding of systems- Large (~23000 LOC in Cedilla Systems)

- No VCgen- Higher-order logic- Allows novel type system or safety arguments- Minimal proof checker(2700 LOC)

Page 35: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

35

رویکرد سخت افزاریهدف: باال بردن سرعت

پردازشایده: افزایش سرعت

با یک سری Proofعملیات طراحی سخت افزاری

اعمال سیاست های گانه با 4ایمنی در چرخه

استفاده از پیاده سازی HDLروی سخت افزار

نتیجه: باال رفتن سرعت Proof

رویکرد های دیگر

Page 36: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

36

زبان های مکملهدف: تضمین یک سری

شروط پیش از اجرای هر بالک از کد ها

ایده: باال بردن قابلیت های ایمنی در اجرای

کدها و تضمین شروط SFI

تعریف یک سری دستورات مکمل جهت باال

بردن انعطاف برنامه نویسی با رویکرد امنیتی

رویکرد های دیگر

Page 37: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

37

Java Modeling Language

است که متد های اعمال رفتارگرایک زبان رابط ها را در کد های برنامه قبل و یا بعد از شرط شده

توصیف می کند. و سیاست requiresمتدهای پیش شرط با عبارت

ها بیان می گردند. ensuresهای ایمنی در قالب

JMLزبان مدلسازی جاوا

Page 38: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

38

یک مثال ساده

class Stack{ private int L=0;int b[]=new int [20];

public void push (int x){b[L++]=x;

}public int pop)(

{ int y=0;

y=b[--L]; return y;

}//}end of class

public class Implement{public static void main(String args[]){

Stack st=new Stack;)(st.push(2);st.push(3);

int n=st.pop;)(System.out.println(n);

.…//}end of main//}end of class

class Stack {private int L=0;Int b[]=new int [20];/*@ normal behavior

@ requires L>0;

@ ensures (\result) >= 2

| |

@ (\result) <= 18

@*/

public void push (int x){

b[L++]=x;}public int pop (){

int y=0;y=b[--L];return y;

}}//end of class

Page 39: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

39

کامپایلر هایی که وظیفه تولید کد ها تحت شبکهرا دارند.

ایده: اجرای کد های امن در بستر شبکهابزار مورد استفادهامنیت برای تولید کننده و مصرف کننده :راه حلTrusted Compilers

کامپایلر شبکه

ProducerTrusted

Compiler Consumer

Page 40: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

40

پرسش و پاسخ

[email protected]

Page 41: امنیت مبتنی بر زبان های برنامه سازی مهران علیدوست نیا

41

[1] B. Schneider, D. Kozen, G. Morrisett, and A. C. Myers, Language-based security for malicious mobile code. In Department of Defense Sponsored Information Security Research: New Methods for Protecting against Cyber Threats, pages 477-494.Wiley, 2007.[2] M.Warnier, Language Based Security for Java and JML, PhD thesis, Radboud University Nijmegen, 2006.[3] D.Kozen. Language-based security, Proc. Conf. Mathematical Foundations of Computer Science (MFCS'99), volume 1672 of Lecture Notes in Computer Science, pages 284-298. Springer-Verlag, September 1999.[4] M. Bartoletti, Static analysis for Java security. Master Thesis, 2001.[5] M. Bartoletti, G. Costa, P. Degano, G. L. Ferrari, F. Martinelli and R. Zunino, Securing Java with local policies, In Workshop on Formal Techniques for Java-like Programs, 2008.[6] K. Marriott, P. J. Stuckey, and M. Sulzmann, Resource usage verification, In Proc, First Asian Programming Languages Symposium, 2003.[7] D. Grossman, Overview of Language-Based Security, 2008.[8] E. Love, Y. Jiny, Y. Makris, Proof-Carrying Hardware Intellectual Property: A Pathway to Trusted Module Acquisition, IEEE Transactions on Information Forensics and Security - Part 1 Volume 7 Issue 1, February 2012.

منابع