Şimdi Ara

Adım Adım Apache Güvenliği

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
2
Cevap
0
Favori
476
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Bu makale, Apache13.xx versiyon web sunucularının, yazılımda yeni açıkları bulunduğunda başarıya ulaşabilecek saldırılardan korunmak ya da bunları en aza indirmek için nasıl kurulacağını ve konfigure edileceğini adım adım göstermektedir.

    Fonksiyonellik

    Apache'nin güvenliğini almaya başlamadan önce, sunucudan hangi fonksiyonları beklediğimizi belirlememiz gerekmekte.Apache'nin kullanım değişkenliği, her şartta sunucu güvenliğini almak için kullanılacak genel prosedürler yazılmasını oldukça zorlaştırmaktadır. Bu sebeple makalemizde aşağıdaki fonksiyonları temel alacağız:


    Web sunucusu İnternet üzerinden erişilebilir olacak, ve;
    Sadece statik HTML sayfaları sunulacak,
    Sunucu isim tabanlı sanal hosting mekanizmasını destekleyecek,
    Belirli web sayfalarına, sadece seçilmiş IP adresleri erişebilir olacak (temel doğrulama);
    Sunucu tüm web isteklerini (web browser bilgileri de dahil olmak üzere) loglayacak,
    Özellikle belirtmek gerekir ki; yukarıdaki model, PHP, JSP, CGİ ya da herhangi interaktif web servisini sağlayan teknolojileri desteklemez. Bu teknolojilerin kullanımı daha fazla güvenlik tehlikelerini beraberinde getirir, önemsiz küçük scriptler köklü sunucu güvenlik seviyesi düşüklüklerine yol açabilir. Neden mi? İlk olarak, ASP/CGI uygulamaları güvenlik açıkları içerebilirler (örnek olarak SQL enjeksiyonlar, bölüm atlama kodlamaları). İkinci olarak, teknoloji kendi kendine tehlikeli olabilir (PHP' de ki açıklar, Perl modülleri vb.). Bu sebeple şiddetle tavsiyem, bu gibi interaktif servisler, web sayfalarında eğer gerekli ise kullanılmalıdır.

    Güvenlik Gereklilikleri

    Her bilgisayar projesinin en önemli birincil unsuru, güvenlik gerekliliklerinin belirlenmesidir. Bu gereklilikler, proje hayata geçirilmeden önce tamamı ile belirlenmelidir. Web sunucumuz için güvenlik gereklilikleri aşağıdaki gibi olacaktır;


    Lokal ve uzaktan saldırılara karşı, işletim sistemi mümkün olduğunca sertleştirilmelidir;
    Sunucu, http (port 80/TCP) haricinde, network servislerine sunulmamalıdır;
    Sunucuya uzaktan erişim, dış kaynaklardan gelecek bağlantıları ret edecek ve sadece iç kaynaktan (web üzerinden) gelecek http port 80/ TCP bağlantılarına izin verecek bir firewall ile kontrol edilmelidir;
    Apache Web sunucusu, sistem üzerinde sadece servis kullanılabilir durumunda bulunmalıdır;
    Sadece ve kesinlikle önemli apache modülleri aktif olmalıdır;
    Herhangi bir diagnostik Web sayfası ve otomatik uzantı indeksleme servisi kapatılmış olmalıdır;
    Sunucu, kendine ait bilgileri asgari düzeyde ifşa etmelidir (gizleyerek, güvenlik);
    Apache sunucusu, başka bir sistem işleyişi tarafından kullanılmayan tek bir UID/GID altında çalışıyor olmalıdır;
    Apache'nin işleyişleri sistem dosyalarına kısıtlı giriş yetkisine sahip olmalı; ve,
    Apache'nin sunum çevreselleri içinde (/bin/sh, /bin/csh vb.) çekirdek programlar sunulmamalıdır.
    İşletim Sisteminin Yüklenmesi

    Apache'nin yüklenmesinden önce, hangi sunucunun çalışacağına bağlı olarak işletim sistemini seçmeliyiz. Bu noktada çok geniş bir seçim alanına sahibiz, çünkü Apache neredeyse tüm işletim sistemlerinde çalıştırılabilmektedir. Makalenin geri kalan kısımlarında ise, Apache web sunucusunun FreeBSD sistemlerde nasıl güvenlik altına alınacağı tarif edilecektir ki bu metotlar aynı zamanda çoğu UNIX/Linux sistemlerde de uygulanabilir. Tavsiye etmediğim tek işletim sistemi ise MS Windows � temel olarak sebebi ise Apache'nin güvenliğini almaktaki kapasite yetersizliğidir.
    Web sunucunun güvenliğini sağlamaktaki ilk adımımız, işletim sistemini güçlendirmektir. A İşletim sistemini sağlamlaştırmayı tartışmak, bu makalenin de gizli amaçlarındadır. Ancak, Internet üzerinden, bunun nasıl yapılacağına dair bir çok doküman bulabilirsiniz. Bu başlıkla ilgili olarak, okuyucular kendi tecrübelerini kullanabilirler.
    İşletim sistemi yüklendikten ve sağlamlaştırıldıktan sonra, yeni grup ve "apache" isminde uygun kullanıcı eklemek zorundayız, (FreeBSD sistemlerden örneklenmiştir):

    pw groupadd apache
    pw useradd apache -c "Apache Server" -d /dev/null -g apache -s /sbin/nologin

    Default olarak, Apache işleyişi nobody kullanıcısının özel hakları ile birlikte çalışır (root hakları ile birlikte çalışan ana işleyiş hariç ) ve nogroup grubunun GID'i dir. Bu ise, belirli bir güvenlik açığına sebebiyet vermektedir. Başarılı bir saldırı sonucu giriş yapan, aynı UID/GID altında çalışan tüm diğer işleyişlere erişim hakkı sağlayabilir.En iyi çözüm, yazılıma bağlı olarak apache'yi UID/GID altında oluşturulmuş tek bir kullanıcı/grup altında çalıştırmaktır.

    Yazılımı Hazırlamak

    Sonraki adım ise Apache Web server 'ın son versiyonunu download etmektir Bazı Apache'lerin opsiyonları derlenme zamanları ile oranlıdır, bu sebeple açık kod olarak download etmek önem kazanmaktadır.
    Download ettikten sonra bunu unpack etmemiz gerekiyor. Bundan sonra ise hangi modüllerin aktif olacağına karar vermemiz gerekiyor. Bütün modüller hakkında k ısa bir açıklama Apache'nin son versiyonunda mevcut durumda ve bu link te bulunabilir:
    http://httpd.apache.org/docs/mod/.

    Apache Modülleri

    Modüllerin seçimi, Apache'nin güvenliğini sağlamaktaki önemli adımlardan biridir.Şu kuralla devam edebiliriz, "ne kadar az, o kadar iyi" Fonksiyonellik ve Güvenlik Gerekliliklerinin sağlanabilmesi için, aşağıdaki modüller aktif olarak bırakılmalıdır:

    Modül ismi / Tanımlama

    httpd_core
    Apache'nin temel özelliğidir, her Apache kurulumunda istenir.

    mod_access
    Client host ismi, IP adresi ya da client'ın diğer karakteristik özeliklerini esas alarak erişim izni sağlar. Çünkü bu modül, "order", "allow" ve "deny" talimatlarını kontorl etmekte kullanılır, kesinlikle aktif olmalıdır.

    mod_auth
    Fonksiyonel gerekliliklerde açıklanan, text dosyası kullanarak kullanıcı doğrulaması işlemi (HTTP temel doğrulama) isteklerini gerçekleştirmek için gereklidir.

    mod_dir
    Dizin index dosyalarını ("index.html, "default.htm" gibi) aramak ve sunmak için gereklidir.

    mod_log_config
    Sunucuya yapılan istekleri loglamak için gereklidir.

    mod_mime
    Karakter ayarı, içerik- kodlama, taşıma, içerik-dil, ve MIME doküman tipleri ayarlamaları için gereklidir.

    Diğer tüm Apache modülleri pasif edilmelidir. Hepsini kapatabiliriz çünkü onlara ihtiyacımız yok. İhtiyaç duyulmayan modülleri kapatarak, bu modüllerde ortaya çıkacak yeni güvenlik açıkları yolu ile sisteme sızmaları önlemiş oluruz.
    Özellikle belirtmek gerekir ki, 2 Apache modülü diğerlerine göre oldukça tehlikelidir: mod_autoindex ve mod_info. İlk modül otomatik dizin indexlemesi sağlamak için kullanılır, ve default olarak aktiftir. Eğer apache sunucu üstünde çalışır durumda ise bu modülü kontrol etmek oldukça kolaydır (örn.http://server_name/icons/) ve index dosyası bulunamadığında web sunucusu dizinlerinin içerikleri alınabilir. İkinci modül ise, mod_info, internet üzerinden erişilebilir olmamalıdır, temel sebebi ise Apache sunucu konfigürasyonunu gösterir. Diğer bir soru ise modüllerin nasıl derleneceğidir. Kalıcı metot en iyi seçim gibi gözüküyor.Eğer Apache'de yeni açıklar bulunursa, biz de muhtemelen açık olmayan modülü değil de, tüm yazılımı tekrar derleriz. Kalıcı metodu seçerek, bir modülü daha pasif yapma ihtiyacımız doğmaktadır - mod_so.

    Yazılımın Derlenmesi

    Her şeyden önce herhangi bir güvenlik yaması � eğer varsa � uygulanmalıdır. Sonra sunucu aşağıdaki gibi derlenmeli ve yüklenmelidir:

    ./configure --prefix=/usr/local/apache --disable-module=all --server- uid=apache --server-gid=apache --enable-module=access --enable-

    module=log_config --enable-module=dir --enable-module=mime --enable-module=auth

    make
    su
    umask 022
    make install
    chown -R root:sys /usr/local/apache

    Sunucu yetkilendirme

    Diğer adım dosya sistemine Apache işlemlerinin erişim yetkilerini kısıtlamaktır. Bunu da sunucunun ana damemon'unun (httpd) yetkilendirmesi ile yapabiliriz. Genellikle, yetkilendirme tekniği yeni bir root dizini yapısı oluşturmak, tüm daemon dosyalarını bunu içine taşımak ve yeni yapı içinde uygun daemon 'u çalıştırmak anlamına gelmektedir.Bunun için daemon ve alt işleyişlerine teşekkür etmemiz gerekir, çünkü sadece yeni root dizinindeki yeni yapıya giriş izni verirler.
    Yeni işleme, /chroot/httpd dizni altında yeni bir root dizin yapısı oluşturarak başlıyoruz:

    mkdir -p /chroot/httpd/dev
    mkdir -p /chroot/httpd/etc
    mkdir -p /chroot/httpd/var/run
    mkdir -p /chroot/httpd/usr/lib
    mkdir -p /chroot/httpd/usr/libexec
    mkdir -p /chroot/httpd/usr/local/apache/bin
    mkdir -p /chroot/httpd/usr/local/apache/logs
    mkdir -p /chroot/httpd/usr/local/apache/conf
    mkdir -p /chroot/httpd/www

    Yukarıda bulunan tüm dizinlerin sahibi root olmalıdır ve giriş izni hakları 0755' e ayarlanmalıdır. Sonra, özel bir aygıt dosyası oluşturacağız: /dev/null:

    ls -al /dev/null
    crw-rw-rw- 1 root wheel 2, 2 Mar 14 12:53 /dev/null

    mknod /chroot/httpd/dev/null c 2 2
    chown root:sys /chroot/httpd/dev/null
    chmod 666 /chroot/httpd/dev/null

    /chroot/httpd/dev/log aygıtı olarak oluşturulacak değişik bir metot için, ki bu FreeBSD sistemlerde sunucunun doğru ve uygun çalışması için ihtiyaçtır, aşağıdaki satıra şu kodlar eklenmelidir /etc/rc.conf:

    syslogd_flags="-l /chroot/httpd/dev/log"

    Sistemi tekrar başlatmalıyız ya da syslogd daemon değişikliklerin sonucu olarak bunu kendi kendine yapacaktır. FreeBSD'den başka bir sistemde /chroot/httpd/dev/log aygıtı yaratmak için geçerli kullanım manuallerine bakmak gerekecektir.(man. syslogd). Sonraki adım ise ana httpd programını, gerekli tüm library ve binary dosyaları ile birlikte yeni dizin ağacı içine kopyalamaktır. Bunu yaparken, gereken tüm dosyaların bir listesini yapmalıyız. Bu tip bir listeyi aşağıdaki komutları kullanarak yapabiliriz (komutların gereklilikleri işletim sistemlerine bağlıdır):

    Komut / Uygulanabilir sistem / Tanım

    ldd
    Hepsi
    Uygulanabilir dosya ya da paylaşımdaki library dosyalarının dinamik bağımlığını listeler

    ktrace/ktruss/kdump
    *BSD
    Kernal işleyiş izlemesini aktif eder, kernal trace data'ları gösterir

    sotruss
    Solaris
    Paylaşımdaki library usül çağrılarını izler

    strace/ltrace
    Linux
    Sistem çağrı ve sinyallerini izler

    strings
    Hepsi
    Binary dosyaları içindeki yazdırılabilir kayıtları (string) bulur

    trace
    AIX
    Seçilmiş sistem olaylarını kaydeder

    trace (freeware)
    HP-UX <10.20
    Sistem çağrılarını ve kernal işleyiş izlerini yazdırır

    truss
    FreeBSD, Solaris, AIX 5L, SCO Unixware
    Sistem çağrı ve sinyallerini izler

    tusc (freeware)
    HP-UX>11
    HP-UX 11 içinde istek yapılan sistem işleyiş çağrılarını izler

    ldd, strings ve truss komutlarının örnek kullanımları aşağıda gösterilmiştir:

    localhost# ldd /usr/local/apache/bin/httpd
    /usr/local/apache/bin/httpd:
    libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x280bd000)
    libc.so.4 => /usr/lib/libc.so.4 (0x280d6000)

    localhost# strings /usr/local/apache/bin/httpd | grep lib
    /usr/libexec/ld-elf.so.1
    libcrypt.so.2
    libc.so.4

    localhost# truss /usr/local/apache/bin/httpd | grep open
    (...)
    open("/var/run/ld-elf.so.hints",0,00) = 3 (0x3)
    open("/usr/lib/libcrypt.so.2",0,027757775370) = 3 (0x3)
    open("/usr/lib/libc.so.4",0,027757775370) = 3 (0x3)
    open("/etc/spwd.db",0,00) = 3 (0x3)
    open("/etc/group",0,0666) = 3 (0x3)
    open("/usr/local/apache/conf/httpd.conf",0,0666) = 3 (0x3)
    (...)

    Yukarıdaki komutlar sadece httpd programına değil, diğer tüm gerekli binary ve library dosyalarına uygulanmalıdır (library dosyaları sık sık diğer library dosyalarını gerektirir). FreeBSD sistemlerde, aşağıdaki dosyalar yeni root dizin yapısına kopyalanmalıdır:

    cp /usr/local/apache/bin/httpd /chroot/httpd/usr/local/apache/bin/
    cp /var/run/ld-elf.so.hints /chroot/httpd/var/run/
    cp /usr/lib/libcrypt.so.2 /chroot/httpd/usr/lib/
    cp /usr/lib/libc.so.4 /chroot/httpd/usr/lib/
    cp /usr/libexec/ld-elf.so.1 /chroot/httpd/usr/libexec/

    truss komutunu kullanarak biz ayrıca aşağıdaki chroot ortamındaki konfigürasyon dosyalarını bulabiliriz:

    cp /etc/hosts /chroot/httpd/etc/
    cp /etc/host.conf /chroot/httpd/etc/
    cp /etc/resolv.conf /chroot/httpd/etc/
    cp /etc/group /chroot/httpd/etc/
    cp /etc/master.passwd /chroot/httpd/etc/passwords
    cp /usr/local/apache/conf/mime.types /chroot/httpd/usr/local/apache/conf/

    Not /chroot/httpd/etc/passwords "nobody" ve "apache" hariç diğer tüm satırlar kaldırılmalıdır. Benzer bir yöntemle, /chroot/httpd/etc/group dizininden "apache" ve "nogroup" hariç diğer tüm satırları da kaldırmalıyız. Sonra, aşağıdaki şekilde şifre veritabanı yapılandırmamız gerekmektedir:

    cd /chroot/httpd/etc
    pwd_mkdb -d /chroot/httpd/etc passwords
    rm -rf /chroot/httpd/etc/master.passwd

    Sonraki adım ise, eğer httpd sunucusu yeni yapılandırılmış bölümde doğru çalışıyorsa, test etmektir. Bunu yapmak için, default Apache konfigürasyon dosyası ve ve örnek bir index.html dosyasını aşağıdaki dizinin altına kopyalamalıyız:

    cp /usr/local/apache/conf/httpd.conf /chroot/httpd/usr/local/apache/co nf/
    cp /usr/local/apache/htdocs/index.html.en /chroot/httpd/www/index.html

    Dosyaları kopyaladıktan sonra, DocumentRoot Directive'i aşağıdaki şekilde değiştirmeliyiz (/chroot/httpd/usr/local/apache/conf/httpd.conf içinde):

    DocumentRoot "/www"

    Sonra sunucuyu çalıştırmaya çalışalım:

    chroot /chroot/httpd /usr/local/apache/bin/httpd

    Herhangi bir sorun olması halinde tavsiyem Apache log dosyalarının tam olarak çözümlenmesidir (/chroot/httpd/usr/local/apache/logs). Alternatif olarak aşağıdaki komutlar kullanılabilir:

    truss chroot /chroot/httpd /usr/local/apache/bin/httpd

    Truss program sorunun sebebini gösterecektir.Hatalar giderildikten sonra, Aoache sunucumuzu kofigüre edebiliriz.

    Apache Konfigürasyonu

    İlk adım /chroot/httpd/usr/local/apache/conf/httpd.conf dosyasını kaldırmak ve aynı yere aşağıdakiler ile benzer içerikli yeni bir tane oluşturmaktır:

    # Temel ayarlar

    ServerType standalone
    ServerRoot "/usr/local/apache"
    PidFile /usr/local/apache/logs/httpd.pid
    ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
    ResourceConfig /dev/null
    AccessConfig /dev/null

    # Performans ayarları

    Timeout 300
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 15
    MinSpareServers 5
    MaxSpareServers 10
    StartServers 5
    MaxClients 150
    MaxRequestsPerChild 0

    # Apache modülleri

    ClearModuleList
    AddModule mod_log_config.c
    AddModule mod_mime.c
    AddModule mod_dir.c
    AddModule mod_access.c
    AddModule mod_auth.c

    # Genel Ayarlar

    Port 80
    User apache
    Group apache
    ServerAdmin Webmaster@www.ebank.lab
    UseCanonicalName Off
    ServerSignature Off
    HostnameLookups Off
    ServerTokens Prod
    <IfModule mod_dir.c>
    DirectoryIndex index.html
    </IfModule>
    DocumentRoot "/www/vhosts"

    # Erişim Kontrolü

    <Directory />
    Options None
    AllowOverride None
    Order deny,allow
    Deny from all
    </Directory>
    <Directory "/www/vhosts/www.ebank.lab">
    Order allow,deny
    Allow from all
    </Directory>
    <Directory "/www/vhosts/www.test.lab">
    Order allow,deny
    Allow from all
    </Directory>

    # MIME encoding

    <IfModule mod_mime.c>
    TypesConfig /usr/local/apache/conf/mime.types
    </IfModule>
    DefaultType text/plain
    <IfModule mod_mime.c>
    AddEncoding x-compress Z
    AddEncoding x-gzip gz tgz
    AddType application/x-tar .tgz
    </IfModule>

    # Loglar

    LogLevel warn
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
    ErrorLog /usr/local/apache/logs/error_log
    CustomLog /usr/local/apache/logs/access_log combined

    # Sanal sunucular

    NameVirtualHost *
    <VirtualHost *>
    DocumentRoot "/www/vhosts/www.ebank.lab"
    ServerName "www.ebank.lab"
    ServerAlias "www.e-bank.lab"
    ErrorLog logs/www.ebank.lab/error_log
    CustomLog logs/www.ebank.lab/access_log combined
    </VirtualHost>
    <VirtualHost *>
    DocumentRoot "/www/vhosts/www.test.lab"
    ServerName "www.test.lab"
    ErrorLog logs/www.test.lab/error_log
    CustomLog logs/www.test.lab/access_log combined
    </VirtualHost>

    Yukarıdaki konfigürasyon, fonksiyonellik ve güvenlik gerekliliklerini içeren önemli komutları kapsamaktadır. Konfigürasyonda sunulan, web sunucusu tarafından desteklenen 2 adet virtual host:

    -www.ebank.lab (www.e-bank.lab)
    -www.test.lab

    Yukarıdaki web sitelerinin içerikleri fiziksel olarak aşağıdaki dizinlerde bulunmaktadır:

    - /chroot/httpd/www/vhosts/www.ebank.lab
    - /chroot/httpd/www/vhosts/www.test.lab

    Her web sitesi,aşağıda belirtilen dizinlerde sunulan kendi log dosyasına sahiptir:

    - /chroot/httpd/usr/local/apache/logs/www.ebank.lab
    - /chroot/httpd/usr/local/apache/logs/www.test.lab

    Yukarıdaki dizinler, Apache sunucusu ilk kez çalıştırılmadan önce yaratılmış olmalıdır � aksi halde Apache doğru çalışmayacaktır. Yukarıdaki dizinlerin sahibi mutlaka root olmalıdır, sys, haklar 0755' e ayarlanmış olmalıdır.
    Apache'nin default konfigürasyon dosyası ile karşılaştırdığımızda aşağıdaki değişikliklerin yapılmış olduğu görülmektedir:


    Aktif modüllerin sayısı hatırı sayılır şekilde azaltılmıştır.
    Apache Versiyonu ile ilgili bilgileri açığa vurmamaktadır (Sunucu İzleri, Sunucu İmzası)
    Apache'nin işleyişleri (root işleyişi hariç) bir tek geçerli kullanıcının/grubun ayrıcalıkları ile uygulanabilir olarak ayarlanmıştır. (Kullanıcı, Grup)
    Apache sadece konfigürasyon dosyasında açık olarak belirlenmiş dosyalar olan dizinler, alt dizinler ve dosyalara erişim izni verecektir.(Dizin, erişim); Diğer tüm istekler default olarak ret edilecektir.
    Apache http istekleri hakkında daha fazla bilgiyi log tutacaktır.
    Son Adımlar

    Son olarak, içeriği aşağıdaki ile aynı olan "apache.sh" adında bir başlat script'i yaratmalıyız:

    #!/bin/sh

    CHROOT=/chroot/httpd/
    HTTPD=/usr/local/apache/bin/httpd
    PIDFILE=/usr/local/apache/logs/httpd.pid

    echo -n " apache"

    case "$1" in
    start)
    /usr/sbin/chroot $CHROOT $HTTPD
    ;;
    stop)
    kill `cat ${CHROOT}/${PIDFILE}`
    ;;
    *)
    echo ""
    echo "Usage: `basename $0` {start|stop}" >&2
    exit 64
    ;;
    esac

    exit 0

    Yukarıdaki script, (UNIX sistemlere bağlı olarak) başlat scriptlerinin bulunduğu uygun dizinin altına kopyalanmalıdır. FreeBSD sistemlerde bu dizin /usr/local/etc/rc.d dizinidir.

    Özet

    Yukarıdaki metotlar, default olarak kurulan Apache sunuculardan çok daha yüksek güvenlik seviyeleri elde etmek için uygulanmalıdır.

    Yazar

    Artur Maj güvenlik danışmanı olarak Avrupa Network Güvenlik Enstitüsünde çalışmaktadır. Solaris Administrator Güvenlik Rehberi için Yardımcı Otoritedir, adım adım rehberi de SUN Solaris işletim sistemlerine saldırılardan korunmak amacı ile hazırlanmıştır. Yazar, hali hazırda internet bankaları, devlet enstitüleri ve çeşitli organizasyon ve şirketler için güvenlik denetlemeleri yapmaktadır.

    Kaynak: Bu doküman, SecurityFOCUS.com aittir.







  • sağol çok faydalı döküman olmuş
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.