Statik kod analizini anlamak için bu makale yeterlidir

Yazar | Lai Jianxin

Kaynak | Yorumlama

Mühür haritası | Oriental IC

Statik kod analizi nedir?

Statik kod analizi, programı fiilen çalıştırmadan kod anlambiliminin ve davranışlarının analizini, böylece programdaki anormal program anlamlarını veya hatalı kodlamadan dolayı programdaki tanımlanmamış davranışları bulmayı ifade eder. Layman'ın deyimiyle, statik kod analizi, kodu yazarken kodun kodlama hatalarını bulmaktır. Tüm kodun yazılmasını beklemenize gerek yoktur ve bir çalışma zamanı ortamı oluşturmanıza ve test senaryoları yazmanıza gerek yoktur. Yazılım geliştirme sürecinin başlarında kodda çeşitli problemler bulabilir, böylece geliştirme verimliliğini ve yazılım kalitesini artırır.

Statik kod analizinin karşılaştığı en büyük sorun nedir?

Modern yazılım sistemlerinin ölçeği gittikçe büyüyor, kod satırlarının sayısı onbinlerce veya yüzbinlerce satırdan on milyonlarca satıra yükseldi; sistemin karmaşıklığı da gitgide artıyor, geleneksel bağımsız sistemden dağıtılmış sisteme, aynı yapıya Sistem heterojen bir sistem haline geldi ve yazılım geliştirme için programlama dili de tek bir dilden çok dilli işbirlikçi bir gelişime doğru evrildi. Bu değişiklikler, SAST araçlarına büyük zorluklar getirdi.

SAST araçları, önce birden çok dilde kodları ve birlikte çalışabilirliklerini eşzamanlı olarak algılama yeteneğine sahip olmalıdır.Örneğin, Android uygulamalarındaki güvenlik açıklarını tespit etmek için SAST, etkili olabilmek için C / C ++ ve Java dillerine ek olarak JNI'yi desteklemelidir. Bayt Kodu ve Yerel Kodun birlikte çalışmasının neden olduğu çeşitli sorunları tespit edin.

Ayrıca, statik program analiz araçları için bu boyutların değerlendirme göstergeleri vardır:

Biri yanlış negatif oranı ve yanlış pozitif oranı ; Çok yüksek yanlış negatif oranı veya yanlış pozitif oranı, SAST aracının uygulanabilirliğinde ve etkinliğinde önemli bir azalmaya yol açacak ve yazılım geliştirme ve yazılım kalitesinin etkinliğini etkili bir şekilde artırmayacaktır.

İkincisi, algılama kurallarının kullanıcıya özgü ihtiyaçlara göre genişletilmesinin ve özelleştirilmesinin kolay olup olmadığıdır. ; SAST araçları, ortak endüstriyel güvenlik kodlama standartlarını desteklemenin yanı sıra, kullanıcı tanımlı kodlama spesifikasyonlarını ve iş mantığı kurallarını da desteklemelidir.

Üçüncüsü, analiz için gereken zaman ve kaynak işgalidir ; SAST aracı bir tarama için çok fazla zaman alırsa veya çok fazla bellek kaynağı kullanırsa, programcının günlük geliştirme çalışması ve süreciyle entegre edilmesi zor olacak ve dolayısıyla geliştirme verimliliğini ve yazılım kalitesini iyileştiremeyecektir.

Derleyici teknolojisi alanında, soyut sözdizimi ağacı (AST) nedir?

Soyut sözdizimi ağacı, program kaynak kodu yapısının ağaç benzeri bir temsilidir. Programın kaynak kodu, çeşitli sözcük türlerini (Token) elde etmek için bir lexer (Lexer) tarafından elde edilir ve ardından ayrıştırıcı (Ayrıştırıcı) tarafından analiz ve dilbilgisi kontrolünden sonra soyut bir sözdizimi ağacı (AST) elde edilir. Soyut sözdizimi ağacının kök düğümü, tüm programı temsil eder ve iç düğümler soyut sözdizimi yapıları veya sözcüklerdir. AST'nin özü, girdi kaynak kodundaki her sözdizimi öğesi ile bire bir yazışmalarında yatmaktadır. Şekil 1'deki C dili kaynak kodu için, karşılık gelen AST'si Şekil 2'de gösterilmektedir.

Şekil 1: while döngüsünün C kodu

Şekil 2: while döngüsünün AST'si

Ara temsil (IR) nedir?

IR, derleme sisteminin veya program statik analiz sisteminin çekirdeğidir.Derleyici veya statik analizördeki kaynak programın dahili temsilidir.Tüm kod analizi, optimizasyon ve dönüştürme çalışmaları ara gösterime göre gerçekleştirilir. IR, genellikle tip kontrolü ve normalizasyondan sonra AST'den dönüştürülür. Derleyici için, ara gösterim üzerinde analiz ve optimizasyon çalışmasını bitirdikten sonra, ara gösterimi diğer dil kaynak koduna veya derleme / hedef dile dönüştürür.

Statik analiz aracı, ara gösterimde anlamsal veya tanımlanmamış davranış analizi gerçekleştirecek ve ardından kaynak koddaki çeşitli güvenlik açıklarını veya kusurları tespit etmek için önceden tanımlanmış çeşitli kuralları veya kullanıcı tanımlı kuralları birleştirecektir.

Modern derleyicilerde ve statik analiz araçlarında, Kontrol Akış Grafiği (CFG) genellikle programın kontrol akışını temsil etmek için kullanılır ve Statik Tek Atama (SSA) programdaki verilerin kullanım-tanımını temsil etmek için kullanılır. Use-Def Chain, bu iki anahtar veri yapısı AST'de değildir. Şekil 1'deki C dili kaynak kodu için, karşılık gelen IR'si Şekil 3'te gösterilmiştir.

Şekil 3: while döngüsünün IR'si

Kaynak kodu hatalarını ararken, neden IR seviyesinde statik kod analizi AST seviyesinden daha doğrudur?

Önceki açıklamaya göre, AST'nin tip kontrolü ve normalizasyonu IR'ye dönüştürülebilir. AST, tanımlayıcı adlandırma kuralı kontrolleri veya ortak kodlama deyim kontrolleri gibi bazı kod spesifikasyon kontrolleri için uygundur. AST üzerindeki kontroller genellikle grafik desen eşleştirme yöntemlerini kullanır.

IR, çeşitli daha zor program güvenlik açığı kontrollerini gerçekleştirmek için daha derin akış duyarlılığı analizi, süreçler arası analiz, bağlama duyarlı analiz, nesneye duyarlı analiz vb. Gerçekleştirebilir. IR ile karşılaştırıldığında, AST'nin şu bariz dezavantajları vardır: AST, kontrol akışını ve veri akışını çok iyi ifade edemez.Giriş kaynak kodunun ağaç temsili olarak, AST, kontrol akışını ve kontrol akışını ifade edecek bir yoldan yoksundur. AST standardize edilmemiştir.Aynı anlamsal yapı farklı yazılırsa, AST'deki temsilleri farklı olacaktır. Örneğin, C dilinde for, while ve if / goto ile ifade edilen döngü yapısı, bunların AST'si farklıdır ve IR'ye dönüştürüldükten sonra oluşturulan kontrol akış grafiği aynıdır. Standardizasyon, program anlamlarını analiz etmeyi kolaylaştırır ve algılamayı daha doğru hale getirir.

IR seviyesinde kod analizi başka ne gibi faydalar sağlayabilir?

En belirgin avantajlardan biri, genellikle AST'nin giriş diliyle ilişkili olmasıdır. Örneğin, C programlarının karşılık gelen C AST'si, Java programlarının karşılık gelen Java AST'si vardır ve IR, ister C kaynak kodu ister Java olsun, genellikle giriş dilinden bağımsızdır. Diğer dillerdeki kaynak kodu veya kaynak kodu, dilden bağımsız IR'ye dönüştürülebilir.

IR üzerine çeşitli analiz ve tespit motorları koyduk, ardından aynı analiz motoru ve tespit motoru, farklı dil tespit kuralları ile farklı dil kodlama hatalarının tespitini gerçekleştirebilir. IR kullanmanın bir başka avantajı da IR'nin AST'den daha kararlı olmasıdır.

Örneğin, mevcut C ++ spesifikasyonu her 3 yılda bir yeni bir standart yayınlayacak ve yeni bir gramer yapısı getirecek, bu da AST'nin her 3 yılda bir işlenecek yeni düğümlere sahip olacağı anlamına geliyor. Analiz motoru AST temel alınarak oluşturulmuşsa, bu yeni düğümleri işlemek için analiz motorunun da her 3 yılda bir güncellenmesi gerekir; ve analiz motoru IR temelinde oluşturulmuşsa, yalnızca yeni AST düğümünün mevcut IR'ye dönüştürülmesi gerekir. Analiz motorunu temelde etkilenmeden tutmak için yapı veya çalışma.

Xcalscan

Genel olarak, Xcalscan'in avantajları esas olarak aşağıdaki üç yönden kaynaklanmaktadır:

Bunlardan biri, yenilikçi ve ölçeklenebilir Akış Duyarlı, Nesneye Duyarlı ve Bağlama Duyarlı analiz motorudur. Akış hassasiyeti, analiz motorunun farklı yürütme yolları altında program değişkenlerinin tanımını ve kullanımını ayırt etmesi ve yalnızca hatalara neden olacak yürütme yollarıyla ilgili uyarıları rapor etmesi anlamına gelir; nesne hassasiyeti, analiz motorunun farklı nesne örnekleri veya aynı nesneyi ayırt edebileceği anlamına gelir. Üyeleri, yalnızca hatalara neden olan nesneler veya nesne üyeleri için uyarıları rapor eder; bağlama duyarlı, analiz motorunun aynı işlevin bağlamını farklı çağrı noktalarında ayırt edebileceği ve yalnızca hatalara neden olan çağrı noktaları için hataları rapor edebileceği anlamına gelir. Xcalscan, statik tek atama (SSA), sanal değişkenler (Sanal Sembol), SSA tabanlı diğer ad analizi (Takma Ad Analizi) ve prosedürler arası analiz (Prosedürler Arası Analiz) gibi kapsamlı kullanım yoluyla analiz motorunun akış hassasiyetini, nesne hassasiyetini ve bağlamını gerçekleştirir. hassas.

Bu analiz motoruna dayalı olarak Xcalscan, her sorunun kaynağının nerede olduğunu, sorunun sonunda ortaya çıkacağı yere ulaşmak için verilerin hangi yol ve işlev çağrı noktasını izlediğini etkili bir şekilde raporlayabilir. Xcalscan'in grafik kullanıcı arayüzü, sorunun kaynaktan adım adım nasıl ortaya çıktığını ve sonunda nerede tetikleneceğini göstermek için bir akış grafiği kullanacaktır.

İkincisi, kaynak modelleme, veri akışı analizi, sembolik yürütme ve resmi doğrulamayı entegre eden bir güvenlik açığı algılama motorudur. Program güvenlik açıklarını tespit etmek için kurallar uygularken Xcalscan, programdaki kuralları ihlal eden herhangi bir kod olup olmadığını tespit etmek için veri akışı analizi, sembolik yürütme ve resmi doğrulamanın bir kombinasyonunu kullanır.

Üçüncüsü, genişletilebilir bir kullanıcı tanımlı kural motorudur. Xcalscan, kullanıcı tanımlı kurallar geliştirmek için analiz ve kural kontrol API'lerini tanımlar ve açar. Kullanıcı, ilgili API'yi çağırarak kullanıcı kodunun veya üçüncü taraf kitaplık işlevlerinin, ön veya son koşulların, denetim kurallarının vb. Niteliklerini ve yan etkilerini belirleyebilir. Xcalscan kural motoru, kullanıcı kurallarını otomatik olarak okuyacak ve bunları kodun ara gösterimine ekleyecektir.Programın statik analizini tamamladıktan sonra, kural motoru, kullanıcı kurallarındaki ön veya son koşulların, kontrol kurallarının vb. Karşılanıp karşılanmadığını belirleyecek ve uyarılar verecektir.

Özetle, yeni nesil bir SAST aracı olarak Xcalscan, tasarımının başlangıcından itibaren birden çok dili ve farklı diller arasında birlikte çalışabilirliği destekleyebilir.Şu anda C / C ++, Java ve JNI'yi desteklemektedir. Sonraki sürümler, Javascript ve Python gibi daha fazla programlama dilini destekleyecektir. Xcalscan tarama sonuçlarının yanlış negatif oranı ve yanlış pozitif oranı düşüktür, tarama daha az işlemci ve bellek kaynağı gerektirir ve kullanıcı tanımlı kuralları destekler.

Bu makalenin yazarı, Xcalscan için bir statik kod analiz aracı olan Xcalscan'in araştırma ve geliştirme başkanıdır. Şu anki işi, Xcalscan'in çekirdek geliştirme ekibine yeni nesil program statik analiz araçlarını (SAST) geliştirmek üzere liderlik etmektir. Bu analiz motoru, Xcalscan için bir statik analiz aracıdır. Takım ürünlerinin temel bileşeni. Analiz motoru, kullanıcı tarafından kaynak kodu girdisini derleyicinin ara gösterimine dönüştürür; akışa duyarlı analiz, prosedürler arası analiz, bağlama duyarlı analiz ve ara gösterime dayalı nesneye duyarlı analiz gerçekleştirir; çeşitli analizler temelinde sembolik yürütme ve biçimsel doğrulamayı birleştirir. Kullanıcı girdi programında, çeşitli kaynak kodu güvenlik kodlama belirtimlerini veya kullanıcı tanımlı kuralları ihlal eden kodlar olup olmadığını tespit etmek için kullanılan araçlar.

Yazar hakkında: Lai Jianxin, derleyici optimizasyonu ve programların gelişmiş statik analizi konusunda zengin deneyime sahiptir. 2006 yılında Tsinghua Üniversitesi'nden bilgisayar bilimi alanında yüksek lisans derecesi aldıktan sonra, Hewlett-Packard derleyici ekibine katıldı ve art arda derleyici geliştirme mühendisi, derleyici arka uç mimarı ve proje yöneticisi olarak görev yaptı ve açık kaynak derleyici Open64, HP-UX'e katıldı. Ürün derleyici aCC ve HP Non-Stop derleyici projesi ve değerlendirmeye 2018'de katıldı.

Xunfei Akıllı Ses Öncüsü: İnsan-bilgisayar etkileşimi insan iletişimi kadar doğal olduğunda, gerçek zeka çağı gelecek!

Apple'ın resmi web sitesi tüm iPhone 8 serilerini kaldırdı; Alibaba "Alibaba Bulut Konferansı" nı başlattı; deepin 20BETA yayınlandı | Geek Manşet

Yeni iPhone SE 3299 yuan'dan başlıyor, güzel kokuyor mu?

Google DeepMind ve arkasındaki teknolojiyi derinlemesine inceleyin

Spring Cloud'dan Service Mesh'e, mikro hizmet mimarisi yönetişim sistemi nasıl gelişir?

Uçak serisi oluşturmak için röportaj: mimarların mikro hizmet arayüzlerini nasıl tasarladığını görün

Pinduoduo, 2899 yuan'dan başlayan yeni iPhone SE'nin sübvansiyonlu fiyatını açıkladı; BOSS, "Uygulama çöktü" yanıtını vermek için doğrudan işe alındı; Chrome'un yeni beta sürümü yayınlandı | Geek Hea
önceki
Çin'deki GitHub geliştiricilerinin sayısı her yıl% 37 artarak dünyanın en hızlısı
Sonraki
Şirketlerin kendi veri merkezlerini inşa etmek için ihtiyaç duydukları şey, bir dizi Silikon Vadisi metodolojisidir (makalenin sonunda faydalar vardır!)
Xunfei Akıllı Ses Öncüsü: İnsan-bilgisayar etkileşimi insan iletişimi kadar doğal olduğunda, gerçek zeka çağı gelecek
Yeni taç virüsü kapsamında yerli ve yabancı teknoloji şirketleri tarafından hangi yazılım çözümleri ve teknolojileri öneriliyor?
Yapay zeka devinin Google DeepMind'ını derinden ortaya çıkarın
Redis, kendi sistemine nüfuz etmek için bir numara öğrenir ve N arıza çözüm paketleriyle birlikte gelir | Kuvvet Projesi
Apple'ın resmi web sitesi tüm iPhone 8 serilerini kaldırıyor; Alibaba "Alibaba Bulut Konferansı" nı başlattı; deepin 20 BETA yayınlandı | Geek Manşet
İnternetin karşı karşıya olduğu en büyük tehlikelerden biri olarak, mevcut DDoS trendi nedir?
Yeni bir işlemci oluşturmak neden zordur?
Platform günlük 700 milyon ziyarete direniyor ve Ar-Ge kalite kontrol süreci tam olarak açıklanıyor
Derinlemesine kuru ürünler! Derin öğrenme eğitim performansı birkaç kez nasıl geliştirilir?
Eski Baidu baş mimarı kendi işini kurdu ve iki yılda on milyonlarca dolar topladı. Yeni yapay zeka ilaçlarının geliştirilmesinin altın bir on yılı başlatacağını söyledi.
Nginx'ten Pandownload'e, programcılar hapishane programlamasından nasıl kaçınabilir?
To Top