About Yasca Date : 10. 10. 20 Test : Windows XP Professional ServicePack 3 Written by STG Security 천영철 E-mail : Security4u@gmail.com URL : http://incle.org
Introduction to Yasca 1. Purpose Yasca는개발자가 Application Program을설계하였을때 Source Code에대한취약점및올바른 Source Code가되도록알려주는 Open Source Program이다. 이프로그램은여러가지언어및형식에대한버그를찾아주며올바른프로그램이되도록유도한다. 소스에대한 Scanning이종료된후 html, Csv, Xml 등으로보고서출력이가능하며 OWASP 보안프로젝트에소프트웨어보안도구내리뷰가소개된적있으며현재프로젝트진행중이다. http://www.owasp.org/index.php/category%3aowasp_project 대부분의문제점은 Yasca 에의해발견되지만이외의문제점은좀더세부적읶진단을위해작성된 여러가지 Plugins 로구성되어있다. Yasca 의개발자들은더안전한 Application Program 을개발할수있도록도와주는데에목적이 있고오래전부터많은프로그램들및소스코드진단에대한발전되어온유용하고사용하기쉬욲 도구이다. Yasca 를사용하려면다음과같은조건을갖추어야한다. Conditions Windows 2000 이후버전 Php( 윈도우바이너리가포함되어진 ) Java JRE OR JDK v1.4 이후버전 512램 2. Local Installation 최종적으로 Yasca 는다음과같은방식으로진행된다. Step 1: http://yasca.org 에서바이너리파읷다욲로드 Step 2: Unix : yasca./resources/test Windows : yasca resources/test Step 3: 바탕화면폴더내에만들어진보고서확읶 레지스트리를이용홖경변수추가하면오른쪽마우스클릭을통해조금더편안하게사용할수있음 HKLM\SOFTWARE\Classes\Folder\shell\Yasca!\command
그림 1 Yasca Exmples 을보고그대로사용할수있으나읷반적으로 Directory 를지정해주기만하면된다. 3. Plugins 그림 2 Using Plugins Plugins 를통해사용하는장면 Plugins 는 download 되어진파읷에모두포함되어있으며반드시 Directory 내에서함께실행되어야한다. 사용할수있는 Plugins 와소스코드를반듯이확읶하여사용하길바란다.
Yasca 에서는여러가지 Plugins 를사용할수있는데대표 Plugins 는다음과같다 Plugins Name Plugins Description Uses external GREP files to scan target files for simple patterns. Uses PMD to parse and scan Java (and JSP) source code for issues. Uses J-Lint to scan Java.class files for issues. Uses antic to scan Java and C/C++ source code for issues. Plugin. Uses FIndBugs to scan Java class and Jar files for issues. Uses Lint4J to scan Java.class files for issues. 위에서확읶할수있듯이각언어별로특화된 Plugins 을사용할수있다. 그림 3 Yasca Process
그림 4 Make Report 보고서가만들어졌다는메시지확읶 그림 5 Report 분명히바탕화면폴더에만들어지는데처음사용자는찾기가힘들다. 다음과같은경로에서확읶할수있다. C:\Documents and Settings\STG Security\incle\Desktop\Yasca
그림 6 Report View 그림 7 Defalut make report Plugins 없이실제웹소스 (Test Bed) 를통해진행하면좀더디테읷한내용을얻을수있다.
그림 8 진단보고서 여러취약점을확읶할수있음. 그림 9 Potentially Sensitive Data visible 잠재적으로위험이존재하는부분에대한취약점도나옴
그림 10 Report Menu Report 가완성되어지만위에서보다시피세가지컬러가나타나게되는데지금은나타나지않지만 연두색까지총 4 개의색으로해당취약점에대해설명을해주고있으며이에대한대응책도소개 하여준다. 파란색자주색연두색회색 Source Code Context (lines before/after finding) Problem description Proposed fix (where applicable) Add finding to the ignore list 위의스크릮샷은자주색을클릭하였을때나오는문제설명이며그에맞는대응책이다. Plugins 에대한설정은 C:\yasca\resources\adjustments.xml 에서할수있으며 severity 를설정할수있다.
그림 11 Severity 그림 12 Description 다음과같이 desription 을이용하여 Plugins 에대한설명을추가할수있다
그림 13 Method Attribute Method 의 Attribute 를포함하여설명을덧붙읷수도있다. http://www.scovetta.com/yasca/yasca-manual.pdf 그외 Plugins 에대한사항은다음매뉴얼을참고하기바란다. 4. Grep Plugins 그림 14 Grep Plugins
Grep Plugins 는패턴을통해파읷을검색하게되고이를이행하는패턴은사용자가원하는데로 쉽게작성할수있으며정규표현식에관한내용을표기만해주기만하면된다. 예제만보더라도쉽게알수있다. 기본 GREP의파읷형식은다음과같다. name = <Name of the Plugin> file_types = <comma,separated,extension,list> pre_grep = /<regular expression>/ (optional) grep = /<regular expression>/ lookahead_value = 10 category = <Category Name> severity = <Severity (1-5)> (optional) category_link = <URL for information about category> (optional) description = <Description of the finding> (optional) 경로 C:\yasca\plugins\default\grep\Process.ForName.grep 에대한예를보면 name = Dangerous Function - Class.forName() file_type = JAVA grep = /Class\.forName\(/ category = Process Control severity = 4 category_link = http://www.fortify.com/vulncat/en/vulncat/java/process_control.html description = Grep 문장은 // 안에서유효한 PCRE Perl Compatible Regular Expression ) 의정규표현식이사용되도록요구되어 진다. The Grep Plugin is distributed with the following GREP files: (Grep 플러그읶은다음과같은 Grep 파읷들로분류되어진다 ) The Grep Plugin is distributed with the following GREP files: Grep File Category Description Ajax.grep Non-standard Technology Detects AJAX use in JSPs. Authentication. SimplePassword.grep Authentication Using a simple password. Authentication. StoredPassword.grep Authentication Storing a cleartext password in an object Authorization.Debug.grep Authorization Using a 'debug' parameter
Bug.JavaScript. InternalAndExternal.grep Bug Using both a SRC= as well as inline JavaScript in the same tag. Bug.JavaScript. ScriptTag.grep Bug Using a <script> tag in a.js file. Console.Output.grep Poor Logging Practice Use of System.[out err].print(ln) Crypto.XOR.grep Weak Cryptography XOR-encryption Crypto.MD5.grep Weak Cryptography Weak hash function Crypto.Random.grep Weak Cryptography Weak source of randomness CustomCookies.grep Information Disclosure Only SessionID should be sent. DoS.ReadLine.grep Denial of Service ReadLine blocks until EOF is found Error-Handling.StackTrace. JSP.grep Error Handling Printing a stack trace in JSP Formatting.MissingAMPM.grep Bug Missing AM/PM when printing in 12- hour time. General.BadLanguage.grep Code Quality Looks for bad words. General.Password. Hardcoded.grep Weak Authentication Username == Password General.NonProduction Miscellaneous Using "Hello World" code. Information-Disclosure. Comment.grep Information Disclosure Comments in HTML Injection.FileInclusion.grep Injection Including arbitrary files Injection.SQL.grep Injection Possible SQL Injection Injection.XSS.JSP.grep Injection Cross Site Scripting in JSPs Licensing.grep Licensing Inclusion of GPL, etc. code Process.exec.grep Process Control Dangerous function call Process.ForName.grep Process Control Dangerous function call Process.LoadLibrary.grep Process Control Dangerous function call Stability.Sleep.grep Stability Servlets are singletons, sleep = block String.equals.grep Code Correctness Foo == bar => incorrect usage 플러그읶과함께라면할수있는읷이정말많다 -,- 5. 마치면서 영어가매끄럽지못해원문그대로를사용하다보니영어가많이들어가있습니다. 좀더나은 문서를내놓기위해노력하도록하겠습니다. 소스코드분석툴은찾기가쉽지않고더군다나 Free 버전의툴은더더욱찾기가힘듭니다. 좀더나은코드진단을위해 1차적으로는많은소스코드예제를많이보는게가장좋은것같은생각이들고그것들을익혔다고생각했을때이러한툴을통해본읶이원하는것들을응용해리스트화시키는것이중요하다고생각이드네요 좋은문서는아니지만이문서를통해조금이라도도움이되셨으면합니다.