"Haftalık Hatalar" Sayı 2: SQL Enjeksiyonu

Kod denetimi, kaynak koddaki güvenlik açıklarını bulmak için statik analiz kullanma yöntemidir, geliştiricilere veya test uzmanlarına yazılımın güvenlik sorunlarını daha kapsamlı bir şekilde anlamalarına yardımcı olabilir ve sorunları ortaya çıkmadan önleyebilir.Bu nedenle akademi ve endüstri tarafından araştırılmıştır. Bu bir sıcak noktadır ve güvenlik geliştirme yaşam döngüsü SDL ve DevSecOps garanti sistemleri için önemli bir teknik araç haline gelmiştir.

360 Code Guardian ekibi tarafından bağımsız olarak geliştirilen ilk yerli kaynak kodu güvenlik tespiti ticari aracına ve on yıldan fazla süredir devam eden güvenlik açığı teknolojisi araştırmalarının birikimine dayanarak, "Defect Weekly Talk" serisi sütunlar başlatıldı. Örnekler ve araç kullanımıyla birlikte her hafta CWE, OWASP ve diğer standartlardaki kusurlara ayrıntılı bir giriş, geliştiricilerin ve güvenlik personelinin çoğu için temel ve standartlaştırılmış kod denetimi öğreticileri sağlamayı amaçlamaktadır.

Son sayıda boş göstericinin [Portal] uygulamasını öğrendim ve bu sorun SQL enjeksiyonunu tanıtmaya devam ediyor.

Bir, SQL enjeksiyonu

Sözde SQL enjeksiyonu, uygulamanın http isteğine SQL komutları eklemek ve bunlar sunucu tarafında alındıktan sonra veritabanı işlemlerine katılmak için kullanılırlar ve sonunda sunucuyu kandırarak kötü amaçlı SQL komutlarını yürütme etkisini elde eder. Teorik olarak uygulamada veri tabanı ile veri etkileşimi olduğu sürece, ekleme, silme, değiştirme, kontrol etme, veriler tamamen kullanıcı tarafından kontrol ediliyor ve uygulama düzgün işlenmiyorsa bu yerlerde SQL enjeksiyonu olabilir. Şu anda, JAVA, PHP, Python, ASP gibi hemen hemen tüm geliştirme dilleri, verileri depolamak için SQL veritabanlarını kullanabilir.Uygun olmayan kullanım SQL enjeksiyon sorunlarına yol açabilir. Bu makale, SQL enjeksiyonunun nedenlerini ve nasıl düzeltileceğini analiz etmek için örnek olarak JAVA dil kaynak kodunu kullanır. SQL enjeksiyonu ile ilgili ayrıntılar için lütfen CWE-89: Bir SQL Komutunda kullanılan Özel Öğelerin Yanlış Nötrleştirilmesi ('SQL Enjeksiyonu') ( bölümüne bakın.

İki, SQL enjeksiyonunun zararı

Veritabanındaki bilgileri (örneğin, yöneticinin arka uç parolası, kullanıcının siteye ait kişisel bilgileri) elde etmek için SQL enjeksiyon güvenlik açıklarını kullanmanın yanı sıra kötü niyetli bir saldırgan, veritabanı izinleri yeterli olduğunda sunucuya bir Truva atı bile yazabilir. Web kabuğu edinin veya sunucu sistem izinlerini daha fazla alın.

Ocak 2017'den Eylül 2018'e kadar, CVE ile ilgili 793 güvenlik açığı bilgisi vardı. Bazı CVE'ler aşağıdaki gibidir:

CVE-2018-13050 Zoho ManageEngineApplications Manager 13.x'de bir SQL enjeksiyon güvenlik açığı var. SQL ifadeleri / j_security_check POST isteğindeki j_username parametresi aracılığıyla enjekte edilebilir. CVE-2017-16542 Zoho ManageEngineApplications Manager 13 programı, manageApplications.do?method=insert isteğindeki ad parametresi aracılığıyla SQL enjeksiyonu gerçekleştirebilir. CVE-2017-16849 Zoho ManageEngine Applications Manager 13, /MyPage.do?method=viewDashBoard'daki forpage parametresi aracılığıyla SQL enjeksiyonuna izin verir. CVE-2017-5570, eClinicalWorks Hasta Portalı 7.0 sürüm 13'te MessageJson.jsp'de kör enjeksiyon tespit etti, ancak yalnızca HTTP POST istekleri göndererek kimliği doğrulanmış kullanıcılar tarafından kullanılabilir. Kötü niyetli saldırganlar, bu güvenlik açığı aracılığıyla veritabanı verilerini kötü amaçlı sunuculara aktarmak için select_loadfile () gibi yöntemler kullanabilir. Üç, örnek kod

3.1 Arızalı kod

Bu bölümde kullanılan örnek kod, Samate Juliet Test Suite for Java v1.3'ten (https://samate.nist.gov/SARD/testsuite.php), kaynak dosya adı: CWE89_SQL_Injection__connect_tcp_execute_01.java'dan gelir.

Yukarıdaki kodda, verilerin 54. satırda bozuk olduğunu görebilirsiniz. Bozuk veriler, 58. satırdaki verilere aktarılır. Herhangi bir güvenlik işlemi olmaksızın 115. satırda SQL birleştirmesi için doğrudan kullanılır ve veritabanı işlemlerine katılır. SQL enjeksiyonunun oluşturulması.

Yukarıdaki örnek kodu tespit etmek için 360 Code Guard kullanılarak, dosyanın 115. satırında "SQL enjeksiyonu" hatası tespit edilebilir ve görüntü seviyesi yüksektir.Aynı zamanda, hata oluşturma sürecini net bir şekilde analiz etmek için izleme yolu sağlanabilir. Şekil 1 ve Şekil 2'de gösterildiği gibi:

Şekil 1 SQL enjeksiyonunun hataları tespit ettiği kaynak nokta

Şekil 2 SQL enjeksiyonunun hataları tespit ettiği havuz noktası

3.2 Kodu düzeltin

Yukarıdaki onarım kodunun 305. satırında, parametreli ifadeler kullanılarak SQL yürütülürken kullanılan ön derleme, kullanıcının girdisi bir parametre ile sınırlıdır. Şekil 3'ten 360 Code Guard'ın onarılan kodu kontrol etmediği görülebilir.

Şekil 3 SQL enjeksiyon onarım örneği

4. SQL enjeksiyonundan nasıl kaçınılır

Yaygın onarım yöntemleri:

1. Giriş parametrelerini işlemek için ön derlemeyi kullanın: SQL enjeksiyonunu önlemek için, kullanıcı girdisi doğrudan SQL deyimlerine yerleştirilemez. Parametreli ifadelerle, kullanıcının girdisi bir parametre ile sınırlıdır. Aşağıdaki gibi:

2. Giriş doğrulama: Girişin normal veri olduğundan emin olmak için kullanıcı girişinin geçerliliğini kontrol edin. Veri kontrolü hem istemcide hem de sunucuda gerçekleştirilmelidir.Sunucu tarafı doğrulamanın yapılmasının nedeni, istemci tarafında doğrulamanın genellikle yalnızca sunucu üzerindeki baskıyı azaltmak ve kullanım kolaylığını artırmaktır. Bir saldırganın paketleri yakalayarak parametreleri değiştirmesi tamamen mümkündür. Veya web sayfasının kaynak kodunu aldıktan sonra, yasallığı doğrulamak için komut dosyasını değiştirin (veya doğrudan komut dosyasını silin) ve ardından istemci doğrulamasını atlamak için yasa dışı içeriği değiştirilmiş form aracılığıyla sunucuya gönderin. Bu nedenle, doğrulama işleminin gerçekten yapıldığından emin olmak için tek yol, sunucu tarafında doğrulama yapmaktır. Ancak bu yöntemler, yetersiz filtreleme nedeniyle kötü niyetli saldırganların bu filtreleri atlayabileceği ve dikkatli kullanılmaları gerektiği fenomenine eğilimlidir.

3. Hata mesajı işleme: SQL enjeksiyonunu önleyin ve bazı ayrıntılı hata mesajlarından kaçının Kötü niyetli saldırganlar genellikle bu hata mesajlarını arka plan SQL'in birleştirme biçimini belirlemek için kullanır veya hatta bu hata enjeksiyonlarını veritabanındaki verileri geçirmek için doğrudan kullanır. Hata mesajı görüntülenir.

4. Şifreleme işlemi: kullanıcı oturum açma adı ve parolası gibi verileri şifreleyin ve kaydedin. Kullanıcı tarafından girilen verilerin şifrelenmesi ve ardından veri tabanında saklanan verilerle karşılaştırılması, kullanıcı tarafından girilen verilerin "sterilize edilmesi" ile eşdeğerdir.Kullanıcı tarafından girilen verilerin artık veri tabanı için özel bir anlamı yoktur. Saldırganların SQL komutları eklemesini önleyin.

* Yazar: Kod 360 korumaları, lütfen FreeBuf.COM'dan belirtin

Hiç makyajsız serin bir yaz neon havuz partisi yaşadım!
önceki
iPhone7 oğlu mu? İOS'un son sürümü düşmüyor ama yükseliyor
Sonraki
Film incelemesinde du | Sevgililer günü tatlı köpek istismarı! Bu film incelemeleri insanları bir anlığına aşık ediyor!
Audi A4L 1.4TFSI uygulama bilgileri bu yıl içinde listelenecektir.
AMiner "3D baskı araştırma raporu" yayınladı
Bunlar yaz için en iyi rujlar! çok kolay!
2016 Çin Üniversitesi CIO Forumu, Chongqing'de başarıyla düzenlendi
Xuelang Tianchi Yapay Zeka Mücadelesi Başarıyla Sonuçlandı, Yapay Zeka Kumaş Kusur Algılamasını Sektörde Mutabakat Sağlıyor
Porschenin en yeni ve en güçlü hibrit teknolojisi bu arabanın üzerine yığılmış
3 milyar Tencent kulübüne "Gezici Dünya" indi, Çin'in bilim kurgu yolculuğuna yardım ediyor
"Haftalık Hatalar" Sayı 1: Null Pointer Dereference
Tüketim türü orta koridor oyuncusu Xiao Qiao, etrafta dolaşmak ekibin özünü tüketir
SUV ne kadar sıcak? Cenevre Otomobil Fuarı'ndaki ilk birkaç modele bakın.
Ağlamaya bak! "Bir Öpücük" Lin Yun'un koşup ağladığını ortaya çıkarır Seyirci: Bir Öpücük, başka bir "Kızlığım" dır.
To Top