83 research outputs found

    AndroShield:automated Android applications vulnerability detection, a hybrid static and dynamic analysis approach

    Get PDF
    The security of mobile applications has become a major research field which is associated with a lot of challenges. The high rate of developing mobile applications has resulted in less secure applications. This is due to what is called the “rush to release” as defined by Ponemon Institute. Security testing—which is considered one of the main phases of the development life cycle—is either not performed or given minimal time; hence, there is a need for security testing automation. One of the techniques used is Automated Vulnerability Detection. Vulnerability detection is one of the security tests that aims at pinpointing potential security leaks. Fixing those leaks results in protecting smart-phones and tablet mobile device users against attacks. This paper focuses on building a hybrid approach of static and dynamic analysis for detecting the vulnerabilities of Android applications. This approach is capsuled in a usable platform (web application) to make it easy to use for both public users and professional developers. Static analysis, on one hand, performs code analysis. It does not require running the application to detect vulnerabilities. Dynamic analysis, on the other hand, detects the vulnerabilities that are dependent on the run-time behaviour of the application and cannot be detected using static analysis. The model is evaluated against different applications with different security vulnerabilities. Compared with other detection platforms, our model detects information leaks as well as insecure network requests alongside other commonly detected flaws that harm users’ privacy. The code is available through a GitHub repository for public contribution

    Спосіб виявлення неоптимального використання програмного коду мовою Kotlin

    Get PDF
    Актуальність теми. На сьогодні активно розвивається область розробки програмного забезпечення. Кожен день створюється величезна кількість рядків програмного коду. Найчастіше при розгляді вихідного коду програм можна виявити окремі частини коду, що за тією чи іншою ознакою виділяються на загальному тлі розглянутого набору даних. Такі приклади нетипового коду в рамках даної роботи називаються кодовими аномаліями або неоптимальним використанням коду. Kotlin - це досить молода мова програмування зі швидко зростаючою спільнотою користувачів і значною екосистемою різноманітних проектів з відкритим вихідним кодом. Розробники вже не перший рік ведуть дослідження з пошуку кодових аномалій в програмах мовою Kotlin. У зв'язку з актуальністю вирішення такого завдання в роботі пропонується розширити існуючі рішення і створити систему виявлення нових фрагментів неоптимального коду. Мета роботи: підвищення ефективності системи виявлення кодових аномалій за рахунок розширення переліку функцій та виявлення нових класів прикладів коду, що виділяються своїм нестандартним змістом в програмах мовою Kotlin. Об’єктом дослідження є методи векторизації, токенізації для розбиття коду та збору статистичного аналізу неоптимального використання програмного коду (аномалій). Предметом дослідження є системи пошуку неоптимального використання програмного коду мовою Kotlin на основі токенів. Методи дослідження. В роботі використовуються методи токенізації, методи веркторизації та кластеризації даних. Наукова новизна одержаних результатів полягає в наступному. 1. Проаналізовано основні методики пошуку неоптимального використання коду та показано, шо на сьогодні залишається недостатньо дослідженим питання пошук неоптимального коду написаних мовою програмування Kotlin. 2. Запропоновано спосіб пошуку неоптимального коду, який відрізняється від існуючих методами векторизації та пошуку аномалій, та дозволяє знайти більше неоптимального коду 3. Проведено апробацію і отримано набір кодових аномалій, які зібрані у класи та порівняно з існуючими рішеннями. 4. Отримано експертну оцінку користі знайдених аномалій. Практична цінність одержаних результатів полягає в тому, що запропонований спосіб підвищує ефективність пошуку неоптимального використання коду, що дозволяє отримати більш якісний код за такими параметрами як швидкодія, пам’ять та поломки програми. Апробація роботи. Основні положення і результати роботи були представлені та обговорювались на: • XIII науковій конференції молодих вчених «Прикладна математика та комп’ютинг» ПМК-2020; • VІ міжнародна науково-технічна Internet-конференція Публікації. За тематикою проведених досліджень опубліковано 2 наукові праці, а саме 2 тези доповідей на конференціях. Структура та обсяг роботи. Магістерська дисертація складається з вступу, трьох розділів, висновків та додатків. У вступі надано загальну характеристику програмного коду, проблематику пошуку неоптимального використання програмного коду сформульовано мету дослідження, показано практичну цінність роботи. У першому розділі надано детальне обґрунтування актуальності напрямку досліджень, виконано оцінку поточного стану в даній сфері, представлено теоретичний огляд особливостей пошуку аномалій. У другому розділі розроблено та описано систему пошуку неоптимального використання програмного коду мовою Kotlin. У третьому розділі проведено апробацію. У висновках проаналізовано отримані результати роботи.Actuality of theme. Today the field of software development is actively developing. Every day a huge number of lines of program code are created. Most often, when considering the source code of programs, you can find individual parts of the code, which in one way or another stand out against the general background of the data set. Such examples of atypical code in this work are called code anomalies or suboptimal use of code. Kotlin is a fairly young programming language with a fast-growing user community and a large ecosystem of various open source projects. The developers have been conducting research on the search for code anomalies in Kotlin programs for more than a year. Due to the urgency of solving this problem, the paper proposes to expand existing solutions and create a system for detecting new fragments of suboptimal code. The purpose of the work is improving the efficiency of the code anomaly detection system by expanding the list of functions and identifying new classes of code examples that stand out for their non-standard content in Kotlin programs. The object of the study is the methods of vectorization, tokenization for code splitting and collection of statistical analysis of suboptimal use of program code (anomalies). The subject of the research is systems for searching for suboptimal use of program code in Kotlin language based on tokens. Research methods. The paper uses methods of tokenization, methods of vectorization and clustering of data. The scientific novelty of the obtained results is as follows. 1. The main methods of searching for suboptimal use of code are analyzed and it is shown that today the question of searching for suboptimal code written in Kotlin programming language remains insufficiently researched. 2. A method for finding a suboptimal code is proposed, which differs from the existing methods of vectorization and anomaly search, and allows to find more suboptimal code 3. Approbation was carried out and a set of code anomalies was obtained, which were collected in classes and compared with existing solutions. 4. An expert assessment of the benefits of the found anomalies was obtained. The practical novelty of the obtained results is that the proposed method increases the efficiency of search for suboptimal use of code, which allows to obtain better quality code in such parameters as speed, memory and program crashes. Approbation of work. The main provisions and results of the work were presented and discussed at: • XIII scientific conference of young scientists "Applied Mathematics and Computing" PMK-2020; • VI International Scientific and Technical Internet Conference Publications. Two scientific papers were published on the subject of the conducted researches, namely 2 abstracts of reports at conferences. Structure and scope of work. The master's dissertation consists of an introduction, three sections, conclusions and appendices. The introduction provides a general description of the program code, the problem of finding suboptimal use of program code, formulates the purpose of the study, shows the practical value of the work. In the first section the detailed substantiation of urgency of a direction of researches is given, the estimation of a current condition in the given sphere is executed, the theoretical review of features of search of anomalies is presented. The second section develops and describes a system for searching for suboptimal use of program code in the Kotlin language. In the third section the approbation is carried out. The results of the work are analyzed in the conclusions

    Backdoors in Neural Models of Source Code

    Full text link
    Deep neural networks are vulnerable to a range of adversaries. A particularly pernicious class of vulnerabilities are backdoors, where model predictions diverge in the presence of subtle triggers in inputs. An attacker can implant a backdoor by poisoning the training data to yield a desired target prediction on triggered inputs. We study backdoors in the context of deep-learning for source code. (1) We define a range of backdoor classes for source-code tasks and show how to poison a dataset to install such backdoors. (2) We adapt and improve recent algorithms from robust statistics for our setting, showing that backdoors leave a spectral signature in the learned representation of source code, thus enabling detection of poisoned data. (3) We conduct a thorough evaluation on different architectures and languages, showing the ease of injecting backdoors and our ability to eliminate them

    Programming tools for intelligent systems

    Full text link
    Les outils de programmation sont des programmes informatiques qui aident les humains à programmer des ordinateurs. Les outils sont de toutes formes et tailles, par exemple les éditeurs, les compilateurs, les débogueurs et les profileurs. Chacun de ces outils facilite une tâche principale dans le flux de travail de programmation qui consomme des ressources cognitives lorsqu’il est effectué manuellement. Dans cette thèse, nous explorons plusieurs outils qui facilitent le processus de construction de systèmes intelligents et qui réduisent l’effort cognitif requis pour concevoir, développer, tester et déployer des systèmes logiciels intelligents. Tout d’abord, nous introduisons un environnement de développement intégré (EDI) pour la programmation d’applications Robot Operating System (ROS), appelé Hatchery (Chapter 2). Deuxièmement, nous décrivons Kotlin∇, un système de langage et de type pour la programmation différenciable, un paradigme émergent dans l’apprentissage automatique (Chapter 3). Troisièmement, nous proposons un nouvel algorithme pour tester automatiquement les programmes différenciables, en nous inspirant des techniques de tests contradictoires et métamorphiques (Chapter 4), et démontrons son efficacité empirique dans le cadre de la régression. Quatrièmement, nous explorons une infrastructure de conteneurs basée sur Docker, qui permet un déploiement reproductible des applications ROS sur la plateforme Duckietown (Chapter 5). Enfin, nous réfléchissons à l’état actuel des outils de programmation pour ces applications et spéculons à quoi pourrait ressembler la programmation de systèmes intelligents à l’avenir (Chapter 6).Programming tools are computer programs which help humans program computers. Tools come in all shapes and forms, from editors and compilers to debuggers and profilers. Each of these tools facilitates a core task in the programming workflow which consumes cognitive resources when performed manually. In this thesis, we explore several tools that facilitate the process of building intelligent systems, and which reduce the cognitive effort required to design, develop, test and deploy intelligent software systems. First, we introduce an integrated development environment (IDE) for programming Robot Operating System (ROS) applications, called Hatchery (Chapter 2). Second, we describe Kotlin∇, a language and type system for differentiable programming, an emerging paradigm in machine learning (Chapter 3). Third, we propose a new algorithm for automatically testing differentiable programs, drawing inspiration from techniques in adversarial and metamorphic testing (Chapter 4), and demonstrate its empirical efficiency in the regression setting. Fourth, we explore a container infrastructure based on Docker, which enables reproducible deployment of ROS applications on the Duckietown platform (Chapter 5). Finally, we reflect on the current state of programming tools for these applications and speculate what intelligent systems programming might look like in the future (Chapter 6)

    Empowering a Relational Database with LSD: Lazy State Determination

    Get PDF
    Computer systems are a part of today’s most common activities and, more often than not, involve some type of interaction with a database. In this scheme, databases play a big role, where even small operational delays could cost millions to big tech companies. It is then, of utmost importance that such systems are responsive and adapt automatically to different types of workload. To this date, Relational Database Management System remain the most popular database type, which allows the executing of concurrent transactions with Atomicity, Consistency, Isolation and Durability guarantees. Enforcing such properties requires strict control over the execution of transactions. However, maintaining such properties and controlling the transactions’ concurrency may hamper performance of the system, being this specially the case when database contention is high. Motivated by such behavior, we propose the lazy evaluation of database SQL queries — using Futures/Promises and Java Database Connectivity (JDBC) — by empowering a relational database with Lazy State Determination (LSD). This novel Application Programming Interface (API) allows delaying operations to the commit time, which in the end reduces the transaction window where conflicts may occur. We observed that, by introducing our implementation of a JDBC-LSD driver, in high contention scenarios the throughput increased by 50% and latency reduced by 40%.Os sistemas informáticos são parte das atividades mais comuns na atualidade e, na maioria das vezes, envolvem algum tipo de interação com uma base de dados. Neste cenário, as bases de dados têm um grande papel, sendo que pequenos atrasos operacionais podem custar milhões às grandes empresas tecnológicas. Até os dias de hoje, os Sistemas de Gestão de Bases de Dados Relacionais continuam a ser o tipo de bases de dados mais popular, permitindo a execução concorrente de transações garantindo as propriedades de Atomicidade, Consistência, Isolamento e Durabilidade. A aplicação de tais propriedades requer um controlo rigoroso sobre a execução de transações. No entanto, manter tais propriedades e controlar a concorrência das transacções pode diminuir o desempenho do sistema, sendo especialmente o caso em bases onde a contenção é elevada. Assim, propomos o atraso na execução de queries SQL na base de dados através da introdução do protocolo de controlo de concorrência Lazy State Determination (LSD), com a utilização de Futuros/Promessas e Java Database Connectivity (JDBC). Esta nova Interface de Programação de Aplicações (API) permite adiar as operações para o momento do commit, o que acaba por reduzir a janela da transação onde conflitos podem ocorrer. Observamos que, ao utilizar LSD em um cliente JDBC, nós conseguimos aumentar a taxa de execução de transações em 50% e reduzir a latência em 40% num ambiente de contenção elevada

    Pitfalls and Guidelines for Using Time-Based Git Data

    Get PDF
    Many software engineering research papers rely on time-based data (e.g., commit timestamps, issue report creation/update/close dates, release dates). Like most real-world data however, time-based data is often dirty. To date, there are no studies that quantify how frequently such data is used by the software engineering research community, or investigate sources of and quantify how often such data is dirty. Depending on the research task and method used, including such dirty data could aect the research results. This paper presents an extended survey of papers that utilize time-based data, published in the Mining Software Repositories (MSR) conference series. Out of the 754 technical track and data papers published in MSR 2004{2021, we saw at least 290 (38%) papers utilized time-based data. We also observed that most time-based data used in research papers comes in the form of Git commits, often from GitHub. Based on those results, we then used the Boa and Software Heritage infrastructures to help identify and quantify several sources of dirty Git timestamp data. Finally we provide guidelines/best practices for researchers utilizing time-based data from Git repositories

    A Study of Typing­Related Bugs in JVM compilers

    Get PDF
    Ο έλεγχος των μεταγλωττιστών είναι ένα ερευνητικό πεδίο το οποίο έχει τραβήξει το ενδιαφέρον των ερευνητών την τελευταία δεκαετία. Οι ερευνητές έχουν κυρίως επικεντρωθεί στο να βρουν σφάλματα λογισμικού που τερματίζουν τους μεταγλωττιστές, και εσφαλμένες μεταγλωττίσεις προγραμμάτων οι οποίες οφείλονται σε σφάλματα κατά της φάσης των βελτιστοποιήσεων. Παραδόξως, αυτό το αυξανόμενο σώμα εργασίας παραμελεί άλλες φάσεις του μεταγλωττιστή, με την πιο σημαντική να είναι η μπροστινή πλευρά των μεταγλωττιστών. Σε γλώσσες προγραμματισμού με στατικό σύστημα τύπων που προσφέρουν πλούσιο και εκφραστικό σύστημα τύπων και μοντέρνα χαρακτηριστικά, όπως αυτοματοποιημένα συμπεράσματα τύπων, ή ένα μείγμα από αντικειμενοστραφείς και συναρτησιακά χαρακτηριστικά, ο έλεγχος σχετικά με τους τύπους στο μπροστινό μέρος των μεταγλωττιστών είναι περίπλοκο και περιέχει αρκετά σφάλματα. Τέτοια σφάλματα μπορεί να οδηγήσουν στην αποδοχή εσφαλμένων προγραμμάτων, στην απόρριψη σωστών προγραμμάτων, και στην αναφορά παραπλανητικών σφαλμάτων και προειδοποιήσεων. Πραγματοποιούμε την πρώτη εμπειρική ανάλυση για την κατανόηση και την κατηγοριοποίηση σφαλμάτων σχετικά με τους τύπους στους μεταγλωττιστές. Για να το κάνουμε αυτό, μελετήσαμε 320 σφάλματα που σχετίζονται με την διαχείριση τύπων (μαζί με τις διορθώσεις και τους ελέγχους τους), τα οποία τα συλλέξαμε με τυχαία δειγματοληψία από τέσσερις δημοφιλής JVM γλώσσες προγραμματισμού, την Java, την Scala, την Kotlin, και την Groovy. Αξιολογήσαμε κάθε σφάλμα με βάση διάφορες πτυχές του, συμπεριλαμβανομένου του συμπτώματος του, της αιτίας που το προκάλεσε, της λύσης του, και των χαρακτηριστικών του προγράμματος που το αποκάλυψε. Τέλος υλοποιήσαμε ένα εργαλείο το οποίο χρησιμοποιεί τα ευρήματα μας ώστε να βρει με αυτοματοποιημένο τρόπο σφάλματα στο μπροστινό μέρος των μεταγλωττιστών της Kotlin και της Groovy.Compiler testing is a prevalent research topic that has gained much attention in the past decade. Researchers have mainly focused on detecting compiler crashes and miscompilations caused by bugs in the implementation of compiler optimizations. Surprisingly, this growing body of work neglects other compiler components, most notably the front­ end. In statically­typed programming languages with rich and expressive type systems and modern features, such as type inference or a mix of object­oriented with functional programming features, the process of static typing in compiler front­ends is complicated by a high­density of bugs. Such bugs can lead to the acceptance of incorrect programs, the rejection of correct programs, and the reporting of misleading errors and warnings. In this thesis, we undertake the first-ever effort to the best of our knowledge to empirically investigate and characterize typing­related compiler bugs. To do so, we manually study 320 typing­related bugs (along with their fixes and test cases) that are randomly sampled from four mainstream JVM languages, namely Java, Scala, Kotlin, and Groovy. We evaluate each bug in terms of several aspects, including their symptom, root cause, bug fix’s size, and the characteristics of the bug­revealing test cases. Finally, we implement a tool for finding front­end compiler bugs in Groovy and Kotlin compilers by exploiting the findings of our thesis
    corecore